-1

我有两个清单

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

任何帮助表示赞赏:)

4

5 回答 5

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']
于 2013-04-30T08:49:29.003 回答
2

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

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

参考:获取两个列表之间的差异

于 2013-04-30T08:55:41.257 回答
2

不要修改您正在迭代的序列。

执行此操作的最短方法:

list(set(first) - set(second))
于 2013-04-30T08:50:48.943 回答
1
l3 = [x for x in first if x not in second]
于 2013-04-30T08:58:30.720 回答
1

试试这段代码,你会发现-4.00s 不是并排出现的:

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]
于 2013-04-30T08:54:19.723 回答