假设我有两个列表listBig
和listSmall
,我想从listSmall
中删除listBig
的所有元素。假设listSmall
中存在listBig
的所有元素,如果listSmall
中有listBig
元素的多个实例,则 被删除,意味着删除一个是关键。
是否有更好的方法来实现这一目标:
listBig = [1,2,3,4,5,6,7,8,4,7]
listSmall = [4,7]
deleted = 0
inner = 0
for outer in range(0,len(listSmall)):
while not deleted == len(listSmall):
if listSmall[outer]==listBig[inner]:
listBig.remove(listBig[inner])
inner=0
deleted+=1
break
inner+=1
print listBig
OUTPUT: [1, 2, 3, 5, 6, 8, 4, 7]
答案 0 :(得分:2)
尝试:
listBig = [item for item in listBig if item not in listSmall]
答案 1 :(得分:1)
我会将您的listSmall
转换为set
(以便更快地进行会员资格查找),然后您可以使用简单的列表理解
>>> setSmall = set(listSmall)
>>> listBig = [i for i in listBig if i not in setSmall]
>>> listBig
[1, 2, 3, 5, 6, 8]
答案 2 :(得分:0)
您可以使用列表推导来比较两个列表中的每个元素,并检查是否有任何重复的元素。如果是这样,重复的元素将从listBig中删除
>>>'listBig[:] = [element for element in listBig if element not in listSmall]
>>>print listBig
[1, 2, 3, 5, 6, 8]
答案 3 :(得分:0)
如果您不想删除重复项,list.remove(x)只会删除它在列表中找到的第一个元素。
listBig = [1,2,3,4,5,6,7,8,4,7]
listSmall = [4,7]
for item in listSmall: listBig.remove(item)