一个if语句中的某些和/或条件如何检查列表中的某些特定元素

2024-05-06 06:58:16 发布

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

我有元组列表

a=[('H40T','H04H'), ('Z40A','H04T'), ('M90K','H04B'), ('H40H','H04B'), ('H40A','A04B'), ('A40T','Q04Q'), ('H40T','H04H'), ('Z40A','L04M'), ('A03C','H04T'), ('H40T','H04B'), ('H40A','A04B'), ('H40T','Q04C')]

我要保留元组,它们至少有一个元素desire=['H04B','H04T','H04H']

我尝试使用这段代码,但它没有删除没有提到的元素的所有元组。你知道吗

for counter in a:
    if ('H04B' not in counter and 'H04T' not in counter and 'H04H' not in counter):
         a.remove(counter)

问题是元组没有它们。此外,我还尝试any()查找不需要的元素。你知道吗

for counter in a:
    if any(x in counter for x in desire):
       a.remove(counter)

Tags: in元素forifcounternot元组desire
3条回答

使用具有设置交集的列表comp,并将元组保留在至少与所需值存在交集的位置,例如:

desired = {'H04B', 'H04T', 'H04H'} # using a set instead of list...
b = [el for el in a if desired.intersection(el)]

给你:

[('H40T', 'H04H'),
 ('Z40A', 'H04T'),
 ('M90K', 'H04B'),
 ('H40H', 'H04B'),
 ('H40T', 'H04H'),
 ('A03C', 'H04T'),
 ('H40T', 'H04B')]

您可以使用列表理解和any来进行过滤

>>> desired = ['H04B','H04T','H04H']
>>> res = [t for t in a if any(e in t for e in desired)]
>>> 
>>> print (res)
[('H40T', 'H04H'), ('Z40A', 'H04T'), ('M90K', 'H04B'), ('H40H', 'H04B'), ('H40T', 'H04H'), ('A03C', 'H04T'), ('H40T', 'H04B')]
a=[('H40T','H04H'), ('Z40A','H04T'), ('M90K','H04B'), ('H40H','H04B'), ('H40A','A04B'), ('A40T','Q04Q'), ('H40T','H04H'), ('Z40A','L04M'), ('A03C','H04T'), ('H40T','H04B'), ('H40A','A04B'), ('H40T','Q04C')]
desire=['H04B','H04T','H04H']

remove_lst=[]
for idx,counter in enumerate(b):
    if all([d not in counter for d in desire]):
            remove_lst.append(counter)
   #         print('removed',counter)
new_list = [el for el in b if el not in remove_lst]
print(len(new_list))
new_list

例如:

b=[1,2,3,3,4,5]
for idx,el in enumerate(b):
   print(idx,el)
   if el==3:
       b.remove(el)

输出为:

0 1
1 2
2 3
3 4
4 5

因为当你遍历一个列表并删除一个元素时,它会跳过下一个元素,因为它会遍历已删除元素的更新列表

一种方法可能是使用列表的副本,或者在之后删除元素,就像上面的代码或集合是解决这个问题的好方法一样。你知道吗

b=[1,2,3,3,4,5]
c=b.copy()
for el in c:
   print(el)
   if el==3:
       b.remove(el)

相关问题 更多 >