Подтвердить что ты не робот

Как искать список, который находится во вложенном списке (список списка) без цикла в Python?

Я прекрасно это понимаю.

sample=[[1,[1,0]],[1,1]]
[1,[1,0]] in sample

Это вернет True.

Но я хочу здесь сделать это.

sample=[[1,[1,0]],[1,1]]
[1,0] in sample

Я хочу, чтобы return был True, но это возвращает False. Я могу это сделать:

sample=[[1,[1,0]],[1,1]]
for i in range(len(sample)):
    [1,0] in sample[i]

Но мне интересно, есть ли какой-нибудь лучший или эффективный способ сделать это.

4b9b3361

Ответ 1

вы можете использовать цепочку из itertools, чтобы объединить списки, а затем выполнить поиск в возвращенном списке.

>>> sample=[[1,[1,0]],[1,1]]
>>> from itertools import chain
>>> print [1,0]  in chain(*sample)
True

Ответ 2

Рекурсивное решение, которое будет работать для произвольной (макс. глубины рекурсии) глубокой вложенности. Также работает, если какие-либо элементы самого внешнего списка сами не являются итерами.

from functools import partial

def contains_nested(some_iterable, elmnt):
    try:
        if elmnt in some_iterable:
            return True
    except TypeError:  # some_iterable is not iterable
        return False
    else:
        return any(map(partial(contains_nested, elmnt=elmnt), some_iterable))

Ответ 3

Я не знаю, как решить это полностью без цикла. Но в Python вы никогда не должны писать for i in range(len(sample)).

Итак, ответ на ваш вопрос: да, есть лучший и быстрый способ, которым вы могли бы зацикливать свой список for i in sample

То, как Python обрабатывает петли, очень быстро работает и очень хорошо работает с большим количеством полномочий (более 50 000).

Ответ 4

Вы можете свернуть свой список sample, а затем выполнить поиск в этом сплющенном списке:

> sample = [[1, [1, 0]], [1, 1]]
> [1, 0] in [item for sublist in sample for item in sublist]
> True