Disons que j'ai une liste comme:

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

Et je veux vérifier si ma_liste contient une sous-chaîne

sub_sting = 'aaa'

Donc, dans ce cas, cela donnera «True» car j'ai «aaaa» sur la liste en tant que sous-liste.

Comment vérifier cette chose?

J'ai déjà envisagé 'in' ou 'str.contains', mais il semble qu'il ne donne pas de réponse appropriée.

0
Donggyun Kim 17 avril 2020 à 15:40

3 réponses

Meilleure réponse

Voici une solution possible:

from itertools import chain

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

Vous pouvez utiliser la fonction de cette manière:

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

print(contains(lst, substr)) # True
2
Riccardo Bucco 17 avril 2020 à 12:57

Vous pouvez aplatir la liste, puis la parcourir. J'ai obtenu la fonction d'aplatissement de Qu'est-ce que le moyen le plus rapide d'aplatir des listes imbriquées arbitrairement en 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)
1
Sri 17 avril 2020 à 12:48

Utilisation:

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

Appel de la fonction:

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

Cela imprime:

True
True
False
0
Shubham Sharma 17 avril 2020 à 12:55