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'
?
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]
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
.
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']
C'est le moyen le plus court:
if 'abc' in str(my_list):
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?
x = 'aaa'
L = ['aaa-12', 'bbbaaa', 'cccaa']
res = [y for y in L if x in y]
for item in my_list:
if item.find("abc") != -1:
print item
any('abc' in item for item in mylist)
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")
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)
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?")
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for item in my_list:
if (item.find('abc')) != -1:
print ('Found at ', item)
mylist=['abc','def','ghi','abc']
pattern=re.compile(r'abc')
pattern.findall(mylist)
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'.