2015-02-26 2 views
0

Приведенные ниже данные о том, как напечатать элементы списка в списке, который присутствовал в другом списке в другом списке?Проверьте, является ли элемент списка в списке в другом списке в списке в Python

Пример;

a = [['P101','John','Jones','100'], ['P102','Steve','Woodhouse','500'], ['P103','Ben','Jacobs','60']] 
b = [['P101','John','Jones','250'], ['P102','Steve','Woodhouse','500'] 

Я хотел бы напечатать 'John Jones' & 'Steve Woodhouse' даже если список 'John Jones' «ы немного отличается (его ID 'P101' все еще появляется в обоих списках). Я также хотел бы напечатать 'Steve Woodhouse', но не 'Ben Jacobs', потому что он не присутствует в обоих списках.

ответ

1

Один из подходов может быть. Это проверяет, присутствует ли тот же идентификатор в обоих списках. (Не эффективный один)

>>> for i in a: 
...  if i[0] in (j[0] for j in b): 
...   print("{} {}".format(i[1],i[2])) 
... 
John Jones 
Steve Woodhouse 
+0

Это является удивительным, и отлично работает, однако как вы говорите, это неэффективно (я буду работать с довольно большими наборами данных), это лучший подход? –

+0

@ B-B. Да, это медленный путь! Но это будет хорошо работать, если вы храните '(j [0] для j в b)' в переменной и оставляете 'print' в каком-то файле, так как трафаретная печать - медленный процесс :) –

1

Вы можете создать словари вместо, а затем пересекаются ключи с помощью viewkeys функции, как так:

a = [['P101','John','Jones','100'], ['P102','Steve','Woodhouse','500'], ['P103','Ben','Jacobs','60']] 
b = [['P101','John','Jones','250'], ['P102','Steve','Woodhouse','500']] 

ad = { p[0]: "{} {}".format(p[1],p[2]) for p in a} 
bd = { p[0]: "{} {}".format(p[1],p[2]) for p in b} 
common_id = ad.viewkeys() & bd.viewkeys() 

for id in common_id: 
    print ad[id] 

Live example

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