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 il est une partie 'abc-123'
et 'abc-456'
, 'abc'
n'existe pas sur lui - même. Alors, comment puis-je obtenir tous les articles qui contiennent 'abc'
?
Réponses:
Si vous souhaitez uniquement vérifier la présence de
abc
dans n'importe quelle chaîne de la liste, vous pouvez essayerSi vous voulez vraiment obtenir tous les éléments contenant
abc
, utilisezla source
if myitem in myarray:
filter(lambda element: 'abc' in element, some_list)
index()
méthode:try: return mylist.index(myitem); except ValueError: pass
Il suffit de lancer ceci: si vous devez correspondre à plusieurs chaînes, par exemple
abc
etdef
, vous pouvez combiner deux compréhensions comme suit:Production:
la source
{s for s in my_list for xs in matchers if xs in s}
(notez les accolades pour créer un ensemble unique). Peut être plus facile à lire, mais peut être plus lent si la plupart dess
valeurs ont une correspondance, car vous vousany
arrêterez efficacement lors de la première correspondance.Utilisez
filter
pour accéder aux éléments qui ontabc
.Vous pouvez également utiliser une liste de compréhension.
Soit dit en passant, n'utilisez pas le mot
list
comme nom de variable car il est déjà utilisé pour lelist
type.la source
Si vous avez juste besoin de savoir si 'abc' est dans l'un des éléments, c'est le moyen le plus court:
la source
C'est une question assez ancienne, mais je propose cette réponse car les réponses précédentes ne traitent pas des éléments de la liste qui ne sont pas des chaînes (ou une sorte d'objet itérable). De tels éléments entraîneraient l'échec de la compréhension de la liste entière avec une exception.
Pour traiter gracieusement ces éléments de la liste en ignorant les éléments non itérables, utilisez ce qui suit:
puis, avec une telle liste:
vous obtiendrez toujours les articles correspondants (
['abc-123', 'abc-456']
)Le test d'itérable n'est peut-être pas le meilleur. Je l'ai ici: en Python, comment puis-je déterminer si un objet est itérable?
la source
[el for el in lst if el and (st in el)]
plus de sens dans l'exemple donné?my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
pas besoin de trop le compliquer.la source
la source
if 'abc' in item
plutôt usageitem.find('abc') == -1
.la source
Utilisez la
__contains__()
méthode de la classe de chaîne Pythons:la source
Je suis nouveau sur Python. J'ai fait fonctionner le code ci-dessous et je l'ai rendu facile à comprendre:
la source
la source
la source
import re
mylist=['abc','def','ghi','abcff']
my_list_string=''.join(mylist)
string_to_find="abc"
res=re.findall(string_to_find,my_list_string)
print(res)
J'ai fait une recherche, qui vous oblige à entrer une certaine valeur, puis il recherchera une valeur dans la liste qui contient votre entrée:
Essayez de rechercher 'abc'.
la source
la source
J'avais besoin des indices de liste qui correspondent à une correspondance comme suit:
production
la source
Question: Donnez les informations de abc
la source
D'après mes connaissances, une déclaration «pour» prendra toujours du temps.
Lorsque la longueur de la liste augmente, le temps d'exécution augmente également.
Je pense que, la recherche d'une sous-chaîne dans une chaîne avec la déclaration «is» est un peu plus rapide.
Mais, je suis d'accord que la
any
déclaration est plus lisible.la source