web-dev-qa-db-fra.com

Vérifier si un élément de liste Python contient une chaîne dans une autre chaîne

J'ai une liste:

my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']

et souhaitez rechercher des éléments contenant la chaîne 'abc'. Comment puis je faire ça?

if 'abc' in my_list:

vérifierait si 'abc' existe dans la liste mais qu'il fait partie de 'abc-123' et 'abc-456', 'abc' n'existe pas par lui-même Alors, comment puis-je obtenir tous les éléments contenant 'abc'?

428
SandyBr

Si vous souhaitez uniquement vérifier la présence de abc dans n’importe quelle chaîne de la liste, vous pouvez essayer:

some_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
if any("abc" in s for s in some_list):
    # whatever

Si vous voulez vraiment obtenir tous les éléments contenant abc, utilisez

matching = [s for s in some_list if "abc" in s]
700
Sven Marnach

Utilisez filter pour accéder aux éléments qui ont abc.

>>> lst = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
>>> print filter(lambda x: 'abc' in x, lst)
['abc-123', 'abc-456']

Vous pouvez également utiliser une compréhension de liste.

>>> [x for x in lst if 'abc' in x]

En passant, n'utilisez pas Word list comme nom de variable, car il est déjà utilisé pour le type list.

67
MAK

Il suffit de jeter ceci: si vous devez faire correspondre plusieurs chaînes, par exemple abc et def, vous pouvez mettre la compréhension de deux listes combinées comme suit:

matchers = ['abc','def']
matching = [s for s in my_list if any(xs in s for xs in matchers)]

Sortie:

['abc-123', 'def-456', 'abc-456']
61
fantabolous

C'est le moyen le plus court:

if 'abc' in str(my_list):
30
RogerS

C'est une question assez ancienne, mais j'offre cette réponse parce que les réponses précédentes ne traitent pas d'éléments de la liste qui ne sont pas des chaînes (ou une sorte d'objet itérable). De tels éléments feraient échouer la compréhension de la liste entière avec une exception.

Pour traiter avec élégance de tels éléments de la liste en ignorant les éléments non-itérables, utilisez les éléments suivants:

[el for el in lst if isinstance(el, collections.Iterable) and (st in el)]

puis, avec une telle liste:

lst = [None, 'abc-123', 'def-456', 'ghi-789', 'abc-456', 123]
st = 'abc'

vous aurez toujours les éléments correspondants (['abc-123', 'abc-456'])

Le test pour iterable peut ne pas être le meilleur. Vous avez compris d'ici: En Python, comment puis-je déterminer si un objet est itérable?

18
Robert Muil
x = 'aaa'
L = ['aaa-12', 'bbbaaa', 'cccaa']
res = [y for y in L if x in y]
9
Mariy
for item in my_list:
    if item.find("abc") != -1:
        print item
9
Rubycon
any('abc' in item for item in mylist)
5
Imran

Utilisez __contains__(), méthode de chaîne.

    a = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
    for i in a:
        if i.__contains__("abc") :
            print(i, " is containing")
1
Harsh Lodhi

Je suis nouveau sur Python. Got ci-dessous le code fonctionne et facile à comprendre 

my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
    for str in my_list:
        if 'abc' in str:
            print(str)
1
Amol Manthalkar
def find_dog(new_ls):
    splt = new_ls.split()
    if 'dog' in splt:
        print("True")
    else:
        print('False')


find_dog("Is there a dog here?")
0
Raja Ahsan Zeb
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']

for item in my_list:
    if (item.find('abc')) != -1:
        print ('Found at ', item)
0
chandra
mylist=['abc','def','ghi','abc']

pattern=re.compile(r'abc') 

pattern.findall(mylist)
0
arun_munagala

J'ai fait une recherche, ce qui vous oblige à entrer une certaine valeur, puis elle recherchera une valeur dans la liste qui contient votre entrée:

my_list = ['abc-123',
        'def-456',
        'ghi-789',
        'abc-456'
        ]

imp = raw_input('Search item: ')

for items in my_list:
    val = items
    if any(imp in val for items in my_list):
        print(items)

Essayez de chercher 'abc'.

0
Jayson Ogso