2016-06-26 4 views
1

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

Есть ли способ найти, совпадают ли те же индексы по 2 спискам?

Например:

x_list = [1, 2, 3, 4, 5] 
y_list = [1, 2, A, B, 5] 

Я хочу знать, является ли первый индекс X такой же, как первый индекс Y, второй индекс X такое же, как второй индекс Y, и т.д. Я мог бы это сделать так:

x_list[0] == y_list[0] 

Но нужно бесконечное решение.

+1

Почему не сравнить 2 списка непосредственно, 'x_list == y_list' –

+0

ли вы имеете в виду, что нам нужно проверить, если ** каждый индекс ** соответствует той же элемент в обоих списках? –

+0

'any (x_list [i] == y_list [i] для i в диапазоне (min (len (x_list), len (y_list))))' Это проверяет, соответствует ли ** любой ** индекс одному и тому же элементу в обоих список. –

ответ

9

zip списки и вернуть тест (который возвращает логическое значение в качестве результата):

[i == j for i, j in zip(x_list, y_list)] 

Вы можете использовать any быстро проверить для существования False (означает, что элементы не совпадают), если вам не нужны значения:

any(i != j for i, j in zip(x_list, y_list)) 

версия any сломается один раз в False найден означает, что вы не можете иметь, чтобы пройти весь список, кроме как в худшем случае.

+1

Обратите внимание, что' izip' из [itertools] (https: //docs.python.org/2.7/library/itertools.html # itertools.izip) можно использовать вместо 'zip', и было бы чрезвычайно полезно использовать' any() 'для сохранения памяти. –

+1

@SunnyPatel Хорошая точка. Спасибо за внимание –

3

Вы всегда можете использовать списковые:

[True if i == j else False for i,j in zip(x_list, y_list)]. Вы также можете проверить менее ясный ответ Моисеем Koledoye, где True if i == j else False является Juzt i == j

функция почтового индекса будет сочетать в себе списки, как [(1, 1), (2, 2), (3, 'A'), (4, 'B'), (5, 5)]

Результат: [True, True, False, False, True]

предложить также использовать izip из itertools, если вы используете python2.

+5

'True if i == j else False' на самом деле просто' i == j' ... Почему дополнительные коды? –

+0

Вы правы, я добавляю это для более явного. – valignatev

+2

'' ' True, если i == j '' 'не является идиоматическим Python. – wwii

1

попробовать это:

[i == j for i, j in zip(x_list, y_list)] 
+0

Это не похоже на вопрос OP при сравнении элементов из одного и того же индекса нескольких списков. –

+0

Обновлен мой ответ, сейчас, спасибо за уведомление – min2bro

1

Вы можете попробовать ниже определения, если вы хотите сравнить списки с различными размерами. Это позволит получить либо уникальные элементы индекса, либо не список True или False.

def is_uniq_lists(x_list, y_list): 
    if len(x_list) != len(y_list): 
     return False 

    for (i,j) in zip(x_list, y_list): 
     if i != j: return False 

    return True 

Результат:

>>> a = [1,2,3,4,5] # Unique lists 
>>> b = [1,2,3,4,5] 
>>> List.is_uniq_lists(a,b) 
True 
>>> a=[1,2,3,4,5] # Different lists 
>>> b=[1,2,'A','B',5] 
>>> List.is_uniq_lists(a,b) 
False 
>>> a=[1,2,3,4,5] 
>>> b=[1,2,3,4,5,6] # Lists of unequal length 
>>> List.is_uniq_lists(a,b) 
False 
Смежные вопросы