我有两个名单
A = [1,3]
B = [1,3,5,6]
我想知道这些列表之间的第一个不同元素的索引(在本例中为2)。
有一种简单的方法可以做到这一点,还是我需要写一个循环?
答案 0 :(得分:5)
您可以使用next()
和enumerate()
函数在zip()
函数中使用以下生成器表达式:
>>> next(ind for ind,(i,j) in enumerate(zip(A,B)) if i != j)
2
答案 1 :(得分:3)
也许你提到的循环是最明显的方式,不一定是最漂亮的。仍然每个O(n)复杂性解决方案都很好。
lesser_length = min(len(A), len(B))
answer = lesser_length # If one of the lists is shorter and a sublist,
# this will be the answer, because the if condition
# will never be satisfied.
for i in xrange(lesser_length):
if A[i] != B[i]:
answer = i
break
在Python3中 range
而不是xrange
。如果您不知道列表之间的差异何时发生,那么生成器将是最佳方式。(在Python2中,xrange
是生成器。在Python3中,xrange
成为常规{{1功能。)
列表理解也是可行的。我发现这更具可读性。