Сравните, равны ли первые два элемента во вложенном списке списку сравнения в Python - PullRequest
0 голосов
/ 27 февраля 2019

В python 2.7 я хотел бы проверить, включен ли список подмножеств элементов в более длинный вложенный список при сравнении, скажем, только первых двух элементов.

Допустим, у нас есть большой список вложенных элементов.elements (этот big_list будет иметь более 10 тыс. элементов, поэтому циклы для каждого сравнения очень неэффективны, и я бы хотел этого избежать).Для этого примера, скажем, у нас есть только 4 вложенных списка в big_list:

`
big_list = ((2,3,5,6,7), (4,5,6,7,8), (6,7,8,8), (8,4,2,7))
`

Если у меня есть один список, скажем, (4,5,11,11,11), я ищу операцию, которая вернет True по сравнению сbig_list, поскольку второй список в big_list начинается с (4,5, ...) и совпадает с первыми двумя элементами моего single_list.По сути, я хочу знать, повторяются ли первые два элемента одного списка (например, (4,5,11,11,11)) в моем большом списке независимо от других следующих чисел (например, 11,11, ...).

Моя операция также должна возвращать False, если другой single_list (например, (4,8,11,11,11)) не совпадает с первыми двумя элементами в big_list.

Надеюсь, это понятнее.Любая помощь?

Заранее спасибо,

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Поскольку у вас есть огромный список, чтобы избежать итерации по всему каждый раз - O (n) временная сложность для каждого поиска, вы можете выполнять поиск с постоянным временем, используя набор.

tup_truth_set = set([tup[:2] for tup in big_list]) # set with first two letters of interest

тогда вы просто сделаете что-то подобное для проверки в постоянное время:

tuple_of_interest[:2] in tup_truth_set 
0 голосов
/ 27 февраля 2019

Я не думаю, что вы можете избежать цикла над своим списком.Даже если вы не запустите цикл самостоятельно и предположите, что есть встроенная функция , о которой я не знаю и которая может выполнить то, что вы просите, я почти уверен, что она зациклит списокфон.Поэтому я предлагаю сделать одну строку кода, включая цикл, очевидно .

(4,5,11,11,11)[:2] in [i[:2] for i in big_list]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...