我有两个列表
first = ['-6.50', '-7.00', '-6.00', '-7.50', '-5.50', '-4.50', '-4.00', '-5.00']
second = ['-7.50', '-4.50', '-4.00']
我希望first
列表中出现的每个元素缩短second
。
for i in first:
for j in second:
if i == j:
first.remove(i)
不知道为什么这不会删除-4.00
['-6.50', '-7.00', '-6.00', '-5.50', '-4.00', '-5.00']
任何帮助表示赞赏:)
答案 0 :(得分:3)
>>> first = ['-6.50', '-7.00', '-6.00', '-7.50', '-5.50', '-4.50', '-4.00', '-5.00']
>>> second = ['-7.50', '-4.50', '-4.00']
>>> set_second = set(second) # the set is for fast O(1) amortized lookup
>>> [x for x in first if x not in set_second]
['-6.50', '-7.00', '-6.00', '-5.50', '-5.00']
答案 1 :(得分:2)
不要修改您正在迭代的序列。
最短的方法:
list(set(first) - set(second))
答案 2 :(得分:2)
答案 3 :(得分:1)
尝试使用此代码,您会发现-4.00
并非并排。
for i in first:
for j in second:
print i,j,
if i == j:
print 'removed'
first.remove(i)
else:
print
要解决您的问题,只需创建一份列表副本,即可通过添加[:]
来完成:
for i in first[:]:
for j in second[:]:
if i == j:
first.remove(i)
另一种方法是:
[i for i in first if i not in second]
答案 4 :(得分:1)
l3 = [x for x in first if x not in second]