列表索引python和列表理解

时间:2017-03-08 21:34:26

标签: python-3.x

list1 = [48, 33, 46, 46, 87, 11, 50, 99, 65, 87]
list2 = [48, 33, 46]
duplicates = [list1.pop(list1.index(i)) for i in list1 if i in list2]

因此,如果我尝试打印重复项,那么[48,46] 这是一个功课,问题是什么 期望代码做并解释如何更改代码以获得预期结果。

1 个答案:

答案 0 :(得分:0)

的是:

list1 = [48, 33, 46, 46, 87, 11, 50, 99, 65, 87]
list2 = [48, 33, 46]
duplicates = [list1.pop(list1.index(i)) for i in list1[:] if i in list2]

是错误的,因为它会在迭代时从[48, 33, 46, 46]中删除项目。所以你跳过一些元素。

制作输入列表的副本会以某种方式修复它:

set

现在我得到:list。要删除结果中的重复项,只需转换为list(set([48, 33, 46, 46])) => [48, 33, 46] 并返回list1.pop(list1.index(i))

即可
list1

请注意,您的duplicates = [i for i in list1 if i in list2] 实际上并非次优,但是因为删除项目时转移了索引,而您不关心更改list1

要计算重复项,请执行以下操作:

Receiver's

您获得相同的结果,并且不会更改receiveUpload