Python pour les puriste

Bonjour
Les puristes en Python pourraient-ils m'expliquer comment fonctionne la troisième ligne, particulièrement au niveau de la variable "string" (surtout le premier).

Je ne connais pas beaucoup d'autres codes autres (genre C, C++), mais je trouve que cette façon de programmer sur 1 seule ligne (dont les codeurs Python sont très friands) nuit à la compréhension (est-elle facilement transposable à d'autres codes ?).
Merci
ListOfStrings = ["one", "three", "wow", "now", "wonda"]
PartialSubString = "wo"
strings_with_substring = [string for string in ListOfStrings if PartialSubString in string]

Réponses

  • ListOfStrings = ["one", "three", "wow", "now", "wonda"]
    PartialSubString = "wo"
    lst = []
    
    for string in ListOfStrings:
        if PartialSubString in string:
            lst.append(string)
    
    print(lst)    # ['wow', 'wonda']
    
  • je comprends tout à fait ce que le code fait (et son équivalent qui est proposé par Wilfrid), mais je ne comprends pas à quoi sert le premier "string" ; après je peux bêtement appliquer en supposant que c'est le nom de l'itérateur (est-ce le cas ?)
  • Bonjour,
    La première string est la même que les deux autres : strings_with_substring est la liste des string telles que string se trouve dans ListOfStrings et PartialSubString est une sous-chaîne de string.

    Dans le même genre :
    lst = [i for i in range(50,101) if i%3 == 0]
    
    lst est la liste des nombres entiers i tels que i soit compris entre 50 et 100 et que le reste dans la division euclidienne de i par 3 soit 0.
  • Essaie ça pour voir :
    strings_with_substring = [string*2 for string in ListOfStrings if PartialSubString in string]
    
    C’est comme en maths : c’est ce que va contenir strings_with_substring, à droite tu as les conditions sur ces trucs : ça doit être dans ListOfStrings et contenir PartialSubString.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • le premier "i" est bien juste la déclaration de l'itérateur ; pour le reste j'ai bien compris

    Merci
  • paul18 a écrit:
    le premier "i" est bien juste la déclaration de l'itérateur ; pour le reste j'ai bien compris

    Non, c’est le deuxième qui est la déclaration de l’itérateur.
    Tu peux très bien écrire ça :
    sum(1 for string in ListOfStrings if PartialSubString in string])
    
    Ça va compter le nombre de chaînes de ListOfStrings qui contiennent PartialSubString.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
Connectez-vous ou Inscrivez-vous pour répondre.