【问题标题】:Delete elements finishing by some characters from a list in Python [closed]从Python中的列表中删除以某些字符结尾的元素[关闭]
【发布时间】:2015-12-18 16:24:58
【问题描述】:

我正在编写 python 脚本,但我遇到了很多问题。

我想知道是否可以从列表中删除元素,但只能删除以某些字符结尾的元素。

例如,我有一个列表: list1 = [SOFA_CONFORT, SOFA, CHAIR_CONFORT, CHAIR]

我想获取列表: list2 = [SOFA, CHAIR] 通过删除以“_CONFORT”结尾的元素。

我不应该知道列表的元素,我希望脚本自己完成所有工作。

提前感谢您的回答。

【问题讨论】:

  • 这是一个字符串列表吗?
  • 当然,有可能。你试过什么吗?
  • 列表是字符串yes的列表。
  • 我尝试使用“remove()”函数,但无法让它在我的应用程序中运行。

标签: python list delete-row


【解决方案1】:

这是带有if 语句的列表理解的标准案例:

list1 = ["SOFA_CONFORT", "SOFA", "CHAIR_CONFORT", "CHAIR"]
list2 = [val for val in list1 if not val.endswith("_CONFORT")]
print(list2) # prints ['SOFA', 'CHAIR']

【讨论】:

  • 感谢您的回答。如果我想保留列表中的一些元素,我该怎么做?例如,我有一个列表:list3 = [LivingRoom_Sofa_Confort, BedRoom_Sofa_Confort, Kitchen_Chair_COnfort...] 我只想保留包含“沙发”的元素。获取列表:list4 = [LivingRoom_Sofa_Confort, BedRoom_Sofa_Confort...]
  • list4 = [val for val in list3 if "Sofa" in val]
【解决方案2】:

也可以使用filter:

list2 = filter(lambda x: not x.endswith('_CONFORT'), list1)

【讨论】:

    【解决方案3】:

    有很多方法可以做到,其中使用内置方法filter

    >>> list1 = ['SOFA_CONFORT', 'SOFA', 'CHAIR_CONFORT', 'CHAIR']
    >>> list2 = filter(lambda s: not s.endswith('_CONFORT'), list1)
    ['SOFA', 'CHAIR']
    

    【讨论】:

      【解决方案4】:

      这是列表推导的完美示例! https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions

      例如,如果您有列表

      my_list = [1, 2, 3, 4, 5]
      

      那么下面的列表推导式只返回列表中大于三个的元素的列表:

      my_short_list = [element for element in my_list if element > 3]
      

      如果你将它与字符串所具有的endswith() 方法结合使用(例如"CHAIR_CONFORT".endswith("CONFORT") thwn,我相信你可以弄清楚如何得到你需要的东西。

      【讨论】:

        【解决方案5】:

        您可能想要使用正则表达式,类似于

        import re
        list1 = ["SOFA_CONFORT", "SOFA", "CHAIR_CONFORT", "CHAIR"]
        list1=[string for string in list1 if not re.search('_CONFORT$', string)]
        

        更多详情请看这里: https://docs.python.org/2/library/re.html

        【讨论】:

        • 这样一个简单的任务不需要使用正则表达式。 OP 也会得到错误的输出,['SOFA', 'SOFA', 'CHAIR', 'CHAIR]
        • 你是对的,我读错了问题,我编辑了我的答案。正则表达式可能有点矫枉过正,但在这里使用它们似乎并没有那么糟糕。
        猜你喜欢
        • 2014-09-23
        • 1970-01-01
        • 2013-01-13
        • 2023-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-04
        • 2022-08-16
        相关资源
        最近更新 更多