2016-05-28 2 views
0

В основном у меня есть два списка элементов, и я хочу проверить, находится ли элемент из второго списка в первом списке. Тогда, если этот элемент находится в первом списке, я хочу присвоить значение переменной, если это не входит в этот список, я хочу присвоить другое значение той же переменной. (Как показано ниже) Можно ли это сделать?Как искать элементы в списке в python

list1 = ['dog','cat','mouse'] 

list2 = ['dog','tutle','bird'] 

if list2 in list1: 
    square = 77 
else: 
    square = 55 

print(square) 

ответ

0

Использование set operations:

if not set(list1).isdisjoint(list2): 

Два множества не пересекаются, если они не имеют общих элементов.

Или использовать any() function с generator expression тестировать каждое значение из list2 в свою очередь:

if any(value in list1 for value in list2): 
    square = 77 
else: 
    square = 55 

или даже:

square = 77 if any(value in list1 for value in list2) else 55 

Испытание value in list1 было бы гораздо более эффективным, если list1 был однако.

+0

Первый работает отлично! Спасибо! –

-1

Чтобы ответить на вопрос, который вы просили:

list1 = ['dog','cat','mouse'] 
list2 = ['dog','tutle','bird'] 
for elem in list2: 
    if elem in list1: 
     square = 77 
    else: 
     square = 55 
    print(elem, "square=", square) 

Но поиск списка занимает много времени. Вы можете получить некоторые ускорений с набором:

set1 = set(list1) 
for elem in list2: 
    if elem in set1: 
     square = 77 
    else: 
     square = 55 
    print(elem, "square=", square) 

Обратите внимание, что указанные поиски кода LIST1 для каждого значения в list2. Если вы хотите узнать, существует ли какое-либо значение в списке2 в списке1, то это должно сделать это:

set1 = set(list1) 
set2 = set(list2) 
if set1.intersection(set2): 
    square = 77 
else: 
    square = 55 
+0

Вы устанавливаете 'square = 55' для * каждого элемента в' list2', который не находится в 'list1' *. Значение 'square' определяется последним значением в' list2' таким образом, другие элементы не имеют значения. –

+0

Кроме того, не создавайте наборы, которые вы затем отбрасываете. Вы создали 3 таких набора; 'set2', и результат пересечения является полностью избыточным. 'set (list1) .isdisjoint (list2)' дает вам обратное; 'True ', если нет пересечения, и * новый набор не создан *. –

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