J'ai plusieurs chaînes qui ressemblent à ceci:

“BPBA-SG790-NGTP-W-AU-BUN-3Y”

Je veux comparer la chaîne à ma liste et si une partie de la chaîne est dans la liste, je veux obtenir uniquement la partie qui se trouve sur la liste en tant que nouvelle variable.

Voici mon code:

    mylist = ["770", "790", "1470", "1490"]
    sq = “BPBA-SG790-NGTP-W-AU-BUN-3Y”

    matching = [s for s in mylist if any(xs in s for xs in sq)]
    print(matching)

>>> ['770', '790', '1470', '1490'] 

Par exemple, voici ce que je veux obtenir:

    mylist = ["770", "790", "1470", "1490"]
    sq = “BPBA-SG790-NGTP-W-AU-BUN-3Y”

    matching = [s for s in mylist if any(xs in s for xs in sq)]
    print(matching)

>>> 790

Une idée de comment faire ça?

0
Benn 1 juin 2020 à 20:37

5 réponses

Meilleure réponse

Vous pouvez utiliser le mot clé in de python:

mylist = ["770", "790", "1470", "1490"]
sq = "BPBA-SG790-NGTP-W-AU-BUN-3Y"
for i in mylist:
    if i in sq:
        print(i)

Le code parcourt la liste et imprime l'élément de liste s'il est dans la chaîne

2
Harka 1 juin 2020 à 17:43

Je ne suis pas sûr de comprendre votre question, mais ce qui suit devrait faire l'affaire

[x for x in mylist if x in sq]

Il vous renvoie une liste de ces éléments de la liste qui apparaît dans la chaîne

0
Eeshaan 1 juin 2020 à 17:43

Essayer

mylist = ["770", "790", "1470", "1490"]
sq = "BPBA-SG790-NGTP-W-AU-BUN-3Y"

b = [x for x in mylist if sq.find(x) != -1]
print b
0
bro 1 juin 2020 à 17:46

[s for s in mylist if s in sq]

Pour ceux qui n'aiment pas la brièveté:

Ceci est une compréhension de liste. Il évalue une liste de chaînes s dans mylist qui satisfont le prédicat s in sq (c'est-à-dire que s est une sous-chaîne de sq).

-1
hmm 1 juin 2020 à 17:57

Comme ça, vous pouvez utiliser une compréhension de liste:

mylist = ["770", "790", "1470", "1490"]
sq = "BPBA-SG790-NGTP-W-AU-BUN-3Y"

matching = [m for m in mylist if m in sq]

print(matching)

Production:

['790']
3
Ann Zen 1 juin 2020 à 17:40