python在列表中查找不同的元素
我想比较这类列表:python在列表中查找不同的元素,python,list,function,Python,List,Function,我想比较这类列表: A = [0,1,0,1,0,1,0,0,0,1,0,1,0,1,0] B = [0,1,0,1,0,0,0,1,0,1,0,1,0,1,0] 找出不同的元素。在这种情况下,它应该返回A的索引5和B的索引7。所有其他元素都是相同的。有没有这个功能 最好的,我们 >>> [index for (_, index) in set(zip(A, xrange(len(A)))) - set(zip(B, xrange(len(B))))] [5, 7] 这到底
A = [0,1,0,1,0,1,0,0,0,1,0,1,0,1,0]
B = [0,1,0,1,0,0,0,1,0,1,0,1,0,1,0]
找出不同的元素。在这种情况下,它应该返回A的索引5和B的索引7。所有其他元素都是相同的。有没有这个功能
最好的,我们
>>> [index for (_, index) in set(zip(A, xrange(len(A)))) - set(zip(B, xrange(len(B))))]
[5, 7]
这到底在干什么
>>> [index for (index, _) in set(enumerate(A)) - set(enumerate(B))]
[5, 7]
请注意,
zip
生成一个列表时,enumerate
生成一个可枚举项,该可枚举项立即被枚举以构建列表。它还生成类型为(index,value)
的元组,而不是像上面的答案那样的(value,index)
。您一定要一行吗?因为除此之外还有更简单的代码:
for i in range(len(A)):
if A[i]!=B[i]:
print i
像这样的东西应该可以奏效(未经测试): 这将返回在每个列表中具有不同值的元素数的列表 如果您的数据集与问题中的不同,则您可以使用:
[i for i, v in enumerate(zip(A, B)) if v[0] != v[1]]
另一个(也许更可读?)一行:
>>> [index for (index,(a,b)) in enumerate(zip(A,B)) if a!=b]
[5, 7]
第一步将列表拉到一起:
[(0, 0), (1, 1), (0, 0), (1, 1), (0, 0), (1, 0), (0, 0), (0, 1), (0, 0),
(1, 1), (0, 0), (1, 1), (0, 0), (1, 1), (0, 0)]
然后使用enumerate()
函数将索引附加到项目:
[(0, (0, 0)), (1, (1, 1)), (2, (0, 0)), (3, (1, 1)), (4, (0, 0)), (5, (1, 0)),
(6, (0, 0)), (7, (0, 1)), (8, (0, 0)), (9, (1, 1)), (10, (0, 0)), (11, (1, 1)),
(12, (0, 0)), (13, (1, 1)), (14, (0, 0))]
然后,它使用一个比较标准来比较项目,并在项目不匹配的地方构建一个索引列表。
zip(a,xrange(len(a))
是enumerate(a)
可以,但我错过了xrange函数。它在哪个模块中?xrange在标准库中,谢谢!这几乎是正确的。它与zip(xrange(len(A),A))
相同,生成一个可枚举的而不是列表。我已经将其纳入了我的答案中。@VascoP在Python2.x中,而不是在Python3中。为什么不使用B的索引5或A的索引7呢?你在假设什么模式吗?你的答案和我的很相似。你同意吗?我同意。你的是在我写我的文章时发布的。。。你想让我删除我的答案吗?然后你写了20分钟的答案,直到你把它贴出来;)不,如果您希望它保留,请不要删除它。但请添加一些值,这样其他人就不会将其视为“复制粘贴”答案。它被贴为未经测试,因为我是在手机上写的。我花时间把它写在一个小键盘上。但无论如何,谢谢你测试我的答案,我会用已经测试过的声明来更新它;)很酷,没问题@Tadeck。我所能说的就是,你一定有一部非常花哨的电话,而且非常渴望接听。。。我向你致敬!只要它只有1和0@贾米拉克:这意味着“与问题完全一样!”:)除非有人试图在两种不同类型的列表中找到不同的项目,别担心hahaha@jamylak:“两种不同类型的列表”?在Python中,列表是一种类型,没有“两种类型的列表”,除非您考虑了tuple,但在这里它的行为方式相同,dict或set,但它们绝对不是列表(有关详细信息,请参阅一些Python教程),或者只是一个序列,但这将是一个很大的误解,称之为列表。不,我的意思是不同的,因为不是1和0,例如[2,0,2][0,0,2],这不等于1。。。啊,别担心,这都是一个很大的误会。。。
[(0, (0, 0)), (1, (1, 1)), (2, (0, 0)), (3, (1, 1)), (4, (0, 0)), (5, (1, 0)),
(6, (0, 0)), (7, (0, 1)), (8, (0, 0)), (9, (1, 1)), (10, (0, 0)), (11, (1, 1)),
(12, (0, 0)), (13, (1, 1)), (14, (0, 0))]