Exemple de liste: mylist = ['abc123', 'def456', 'ghi789']
Je veux récupérer un élément s'il existe une correspondance pour une sous-chaîne, comme abc
sub = 'abc'
print any(sub in mystring for mystring in mylist)
ci-dessus imprime True
si l'un des éléments de la liste contient le motif.
Je voudrais imprimer l'élément qui correspond à la sous-chaîne. Donc, si je vérifie 'abc'
je veux seulement imprimer 'abc123'
de la liste.
print [s for s in list if sub in s]
Si vous voulez les séparer par des nouvelles lignes:
print "\n".join(s for s in list if sub in s)
Exemple complet, avec insensibilité à la casse:
mylist = ['abc123', 'def456', 'ghi789', 'ABC987', 'aBc654']
sub = 'abc'
print "\n".join(s for s in mylist if sub.lower() in s.lower())
Toutes les réponses fonctionnent mais elles parcourent toujours toute la liste. Si je comprends votre question, vous n'avez besoin que du premier match. Donc, vous n'avez pas à prendre en compte le reste de la liste si vous avez trouvé votre première correspondance:
mylist = ['abc123', 'def456', 'ghi789']
sub = 'abc'
next((s for s in mylist if sub in s), None) # returns 'abc123'
Si la correspondance est à la fin de la liste ou pour de très petites listes, cela ne fait aucune différence, mais considérons cet exemple:
import timeit
mylist = ['abc123'] + ['xyz123']*1000
sub = 'abc'
timeit.timeit('[s for s in mylist if sub in s]', setup='from __main__ import mylist, sub', number=100000)
# for me 7.949463844299316 with Python 2.7, 8.568840944994008 with Python 3.4
timeit.timeit('next((s for s in mylist if sub in s), None)', setup='from __main__ import mylist, sub', number=100000)
# for me 0.12696599960327148 with Python 2.7, 0.09955992100003641 with Python 3.4
Utilisez une simple boucle for
:
seq = ['abc123', 'def456', 'ghi789']
sub = 'abc'
for text in seq:
if sub in text:
print(text)
les rendements
abc123
Ceci affiche tous les éléments contenant des sous:
for s in filter (lambda x: sub in x, list): print (s)
Je voudrais juste utiliser une regex simple, vous pouvez faire quelque chose comme ça
import re
old_list = ['abc123', 'def456', 'ghi789']
new_list = [x for x in old_list if re.search('abc', x)]
for item in new_list:
print item