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

2024-10-04 03:16:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有两张单子

    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']

我只是想删除所有的“符号”(大写/小写/两者的组合/前缀,后缀为any.)

有人能帮我吗


Tags: def单子designabcsignlist1人能xxsign
3条回答

你可以试试这个:-

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']

您还可以使用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']

试试这个,^(\.|).empty后跟sign开始

import re

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

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

相关问题 更多 >