如何从列表中删除元素

时间:2013-04-30 08:48:12

标签: python list python-2.7

我有两个列表

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

任何帮助表示赞赏:)

5 个答案:

答案 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)

如果您不关心订单,请使用

list(set(temp1) - set(temp2))

参考文献:Get difference between two lists

答案 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]