2016-03-04 4 views
2

У меня есть два списка говоритиндекса первого элемента, отличающегося без петли

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

Я хочу знать индекс первого элемента, отличающийся между этими списками (2 в данном случае).

Есть ли простой способ сделать это, или мне нужно написать цикл?

+0

Если они оба всегда сортируются, тогда существует способ без петель –

+0

Сортировка не гарантируется. Какой ярлык для сортированных петель? – goelakash

+0

Я не думаю, что есть что-то более простое, чем прямолинейная петля над списками, сравнивая элементы и сохраняя дорожку индекса. Это все еще очень простое решение. – Akavall

ответ

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 

range вместо xrange в Python3. Генератор будет лучшим способом при условии, что вы не знаете, когда будет происходить разницу между списками. (В python2, xrange является генератором. В Python3, xrange стал регулярной range() функции.)

списка понимание также жизнеспособный. Я считаю, что это более читаемо.

5

Вы можете использовать следующее выражение генератора в next() функции с использованием enumerate() и zip() функции:

>>> next(ind for ind,(i,j) in enumerate(zip(A,B)) if i != j) 
2 
+0

Это не работает, если один список является подмножеством другого. – goelakash

+1

Возможно, вы захотите прояснить это условие, отредактировав свой вопрос. –

Смежные вопросы