没有循环的第一个不同元素的索引

时间:2016-03-04 19:27:25

标签: python

我有两个名单

A = [1,3]
B = [1,3,5,6]

我想知道这些列表之间的第一个不同元素的索引(在本例中为2)。

有一种简单的方法可以做到这一点,还是我需要写一个循环?

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功能。)

列表理解也是可行的。我发现这更具可读性。