Исправить, list
Объекты не хешируются, потому что они изменяемы. tuple
объекты хешируются (при условии, что все их элементы хешируются). Так как ваши сокровенные списки все только целые числа, что дает прекрасную возможность работать вокруг не-hashableness списков:
>>> lists = [[[1,2],[3,4],[6,7]],[[3,4],[5,9],[8,3],[4,2]],[[3,4],[9,9]]]
>>> sets = [set(tuple(x) for x in y) for y in lists]
>>> set.intersection(*sets)
set([(3, 4)])
Здесь я даю вам набор, который содержит кортежи координат, которые присутствуют во всех подсписках , Чтобы получить список, например, вы начали с:
[list(x) for x in set.intersection(*sets)]
делает трюк.
Чтобы устранить озабоченность по @wim, если вы действительно хотите ссылку на первого элемента на пересечении (где first
определяется быть первым в lists[0]
), самый простой способ, вероятно, так:
#... Stuff as before
intersection = set.intersection(*sets)
reference_to_first = next((x for x in lists[0] if tuple(x) in intersection), None)
Это вернет None
, если пересечение пусто.
ли «общий» смысл «содержащиеся в каждом списке», или «не единственный в списке»? – wim