Как проверить, существует ли элемент во втором подсписке? - PullRequest
0 голосов
/ 29 октября 2018

Если бы у меня был такой список:

L = [
           ['a', 'b'], 
           ['c', 'f'], 
           ['d', 'e']
       ]

Я знаю, что могу проверить, например, 'f' содержался в любом из подсписков с использованием any следующим образом:

if any('f' in sublist for sublist in L) # True

Но как мне поступить с поиском по вторым подспискам, т.е. если список был инициализирован следующим образом:

L = [
           [
               ['a', 'b'], 
               ['c', 'f'], 
               ['d', 'e']
           ], 
           [
               ['z', 'i', 'l'],
               ['k']
           ]
       ]

Я пытался объединить в цепочку выражения for in, например:

if any('f' in second_sublist for second_sublist in sublist for sublist in L)

Однако, это происходит сбой, потому что name 'sublist' is not defined.

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Сначала напишите свою логику в виде обычного for цикла:

for first_sub in L:
    for second_sub in first_sub:
        if 'f' in second_sub:
            print('Match!')
            break

Затем переписать в качестве выражения-генератора операторы for в том же порядке:

any('f' in second_sub for first_sub in L for second_sub in first_sub)
0 голосов
/ 29 октября 2018

Если вам не нужно знать, где находится «f», вы также можете использовать itertools здесь.

import itertools

any('f' in x for x in itertools.chain.from_iterable(l))

Это сгладит ваши вложенные списки и оценит каждый список отдельно. Преимущество здесь состоит в том, что если у вас есть три вложенных списка, это решение будет работать без продолжения написания циклов nest for.

0 голосов
/ 29 октября 2018

Вы можете использовать any дважды, например так:

if any(any('f' in secondsublist for secondsublist in sublist) for sublist in list) # True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...