J'essaie d'utiliser la compréhension de liste pour remplacer une boucle for dans le but d'améliorer la vitesse. Étant nouveau dans la liste des compréhensions, il semble que je n'ai pas une compréhension complète de leur fonctionnement. Mon intention est de transmettre une liste à une fonction qui est conservée en mémoire pour terminer le traitement qui doit être effectué, puis de renvoyer la liste. Dans cet exemple simplifié, il semble qu'au lieu de renvoyer la liste que je veux, il renvoie une liste de listes identiques. Donc au lieu de [1, 2, 3, 4, 5] j'obtiens [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]. J'ai regardé le résultat ici mais il semble qu'ils aient eu un problème différent.

lst1 = [1,2,3,4,5]
k = []
def main():
    lst2 = [processfile(x) for x in lst1]
    print(lst2)
def processfile(i):
    k.append(i) 
    return(k)
if __name__ == '__main__':
    main()

Toute aide serait grandement appréciée.

-2
Bar-Tzur 3 juin 2020 à 18:46

3 réponses

Meilleure réponse

Si vous voulez retourner une liste, vous n'avez pas besoin d'ajouter les éléments du lst1 à k, renvoyez simplement i

lst1 = [1,2,3,4,5]
def main():
    lst2 = [processfile(x) for x in lst1]
    print(lst2)
def processfile(i): 
    return(i)
if __name__ == '__main__':
    main()
1
DaVinci 3 juin 2020 à 15:57

Puisque k n'est utilisé que dans la fonction process file(), évitez de le déclarer dans la portée globale. Je n'ai pas tout à fait compris ce que vous vouliez / essayiez de faire, mais j'espère que cet exemple vous aidera à comprendre la liste, aussi, je vous recommande d'ajouter 'Python' au titre de votre message.

Ici, j'utiliserai la compréhension de liste pour ajouter 1 à tous les éléments de list1.

lst1 = [1,2,3,4,5]

def main():
    lst2 = [add1(item) for item in lst1]
    print(lst2)

def add1(num):
    return num + 1

if __name__ == '__main__':
    main()

La sortie attendue est lst2 = [2,3,4,5,6]

0
LombardiD 3 juin 2020 à 15:54

Juste

lst2 = [processfile(x) for x in lst1]

Sera bien.

Dans ce cas, vous devriez faire comme ci-dessous:

def processfile(i): 
    return(i)
0
ngShravil.py 3 juin 2020 à 16:04