Quelle est la façon la plus efficace de vérifier une partie d'une chaîne dans une liste?

Par exemple, disons que je recherche "4110964_se" (Vrai) ou "4210911_sw" (Faux) dans la liste suivante:

files = ['H:\\co_1m_2013\\41108\\m_4110864_se_12_1_20130717.tif',
         'H:\\co_1m_2013\\41108\\m_4110864_sw_12_1_20130717.tif',
         'H:\\co_1m_2013\\41109\\m_4110964_se_12_1_20130722.tif']

Si j'utilise une simple vérification, les résultats ne sont pas ceux que j'attendrais:

>>> "4110964_se" in files
False
0
Borealis 15 juil. 2015 à 19:49

3 réponses

Meilleure réponse
any('4110964_se' in f for f in files) # check if the string is in any of the list items
8
Malik Brahimi 15 juil. 2015 à 16:51

Vous pouvez utiliser:

for x in files:
    if '4110964_se' in x:
        bool('4110964_se')

Il imprime:

True 
1
BattleDrum 15 juil. 2015 à 17:39

La réponse de Malik Brahimi fonctionne, bien qu'une autre façon de le faire soit simplement de mettre les fichiers dans une boucle for comme ceci:

for f in files:
    print "4110964_se" in f

La raison pour laquelle votre solution ne fonctionne pas est qu'elle recherche uniquement les éléments qui ont la valeur exacte "4110964_se", plutôt que de regarder dans chaque chaîne pour voir si cette valeur se trouve n'importe où dans l'une des chaînes. Par exemple, si vous l'avez fait:

print "H:\\co_1m_2013\\41108\\m_4110864_se_12_1_20130717.tif" in files

Il afficherait Vrai, car vous lui avez donné le nom de fichier complet, plutôt qu'un simple morceau

1
Robbie 15 juil. 2015 à 17:05