Как проверить, существует ли подстрока в списке, имеющем несколько подсписков? - PullRequest
0 голосов
/ 17 апреля 2020

Допустим, у меня есть список, такой как:

example_of_list = [[['aaaa'],['bbbb'],['cccc']], [['aabsd'],['fdwewd'],['dsfss']], [['sssss'],['ddddd'],['fffff']]]

И я хочу проверить, содержит ли my_list подстроку

sub_sting = 'aaa'

Итак, в этом случае это даст ' Верно », потому что у меня есть« aaaa »в списке как подсписок.

Как проверить эту вещь?

Я уже рассматривал 'in' или 'str.contains', но, похоже, это не дает правильного ответа.

Ответы [ 3 ]

2 голосов
/ 17 апреля 2020

Вот возможное решение:

from itertools import chain

def contains(lst, substr):
    return any(substr in s for s in chain(*chain(*lst)))

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

lst = [[['aaaa'], ['bbbb'], ['cccc']],
       [['aabsd'], ['fdwewd'], ['dsfss']],
       [['sssss'], ['ddddd'], ['fffff']]]
substr = "aaa"

print(contains(lst, substr)) # True
1 голос
/ 17 апреля 2020

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

example_list = [[['aaaa'],['bbbb'],['cccc']], [['aabsd'],['fdwewd'],['dsfss']], [['sssss'],['ddddd'],['fffff']]]

def flatten(container):
    for i in container:
        if isinstance(i, (list,tuple)):
            for j in flatten(i):
                yield j
        else:
            yield i

new_list = list(flatten(example_list))
for elem in new_list:
    if ('aaa' in elem):
        print(elem)
0 голосов
/ 17 апреля 2020

Использование:

def contains(lst, substr):
    for item in lst:
        if isinstance(item, list) and contains(item, substr):
            return True
        elif substr in item:
            return True

    return False

Вызов функции:

print(contains(example_of_list, 'aab'))
print(contains(example_of_list, 'sfss'))
print(contains(example_of_list, 'aasb'))

Печать:

True
True
False
...