如何从列表中删除某些元素取决于某些条件

时间:2020-07-06 12:04:49

标签: python python-3.x list

这是我的第一个问题。希望你们中的一些人能提供帮助。

我有两个清单。

    list1 = ['sign','SIGN','siGN','DESIGN','design','deSIGn','xxdesignxx', 
            'xxdesign', 'xxdesignxx', '.sign.', 'sign.', 'sign.',
            'sign.', 'xxsignxx', 'xxsign', 'xxsignxx','abc','def']
    list2 = ['sign']

我希望输出为:

list1 = ['DESIGN','design','deSIGn','xxdesignxx', 
        'xxdesign', 'xxdesignxx','xxsignxx', 'xxsign', 
        'xxsignxx']

我只是想删除所有“符号”(大写/小写/两者的组合/前缀,后缀加任何“。”)

有人可以帮我吗?

5 个答案:

答案 0 :(得分:7)

您可以尝试以下操作:-

list1 = ['sign','SIGN','siGN','design', 'design', 'design', 
         'xxdesignxx', 'xxdesign', 'xxdesignxx', '.sign.', 'sign.', 
         'sign.', 'sign.', 'xxsignxx', 'xxsign', 'xxsignxx']
list2 = ['sign']

res = [i for i in list1 if i.lower().strip('.') not in list2[0]]
print(res)

输出:-

['design', 'design', 'design', 'xxdesignxx', 'xxdesign', 'xxdesignxx', 'xxsignxx', 'xxsign', 'xxsignxx']

已回答问题的答案

list1 = ['sign','SIGN','siGN','DESIGN','design','deSIGn','xxdesignxx', 
         'xxdesign', 'xxdesignxx', '.sign.', 'sign.', 'sign.',
         'sign.', 'xxsignxx', 'xxsign', 'xxsignxx','abc','def']
list2 = ['sign']

res = [i for i in list1 if list2[0] in i.lower() and i.lower().strip('.') not in list2[0]]
print(res)

输出:-

['DESIGN', 'design', 'deSIGn', 'xxdesignxx', 'xxdesign', 'xxdesignxx', 'xxsignxx', 'xxsign', 'xxsignxx']

答案 1 :(得分:1)

您还可以使用filter()函数从列表中过滤某些值,而不是列表理解。除此之外,您只需要将所有元素设置为相同的大写/小写格式并过滤出句点即可。

list(filter(lambda x: 'sign' != ''.join([i for i in x if i.isalpha()]).lower(), list1))
['design',
 'design',
 'design',
 'xxdesignxx',
 'xxdesign',
 'xxdesignxx',
 'xxsignxx',
 'xxsign',
 'xxsignxx']

答案 2 :(得分:0)

尝试此操作,^(\.|).empty开头,后跟sign

import re

search_ = re.compile("^(\.|)sign", re.IGNORECASE)

[x for x in list1 if not search_.search(x)]

答案 3 :(得分:0)

您可以在这里使用str.strip()剥离任何'.',然后进行比较:

list1 = ['sign','SIGN','siGN','DESIGN','design','deSIGn','xxdesignxx', 
        'xxdesign', 'xxdesignxx', '.sign.', 'sign.', 'sign.',
        'sign.', 'xxsignxx', 'xxsign', 'xxsignxx','abc','def']

list2 = ['sign']

list1 = [w for w in list1 if len(list2[0]) < len(w.strip('.'))]

print(list1)

输出:

['DESIGN', 'design', 'deSIGn', 'xxdesignxx', 'xxdesign', 'xxdesignxx', 'xxsignxx', 'xxsign', 'xxsignxx']

答案 4 :(得分:-2)

如果我听错了,你也想删除标点符号。

s.translate(None, string.punctuation)

s是您拥有的字符串。也许这会有所帮助。

对于更高版本的python

s.translate(str.maketrans('', '', string.punctuation))