106 votes

Comment puis-je effectuer des travaux dans une liste de compréhension ?

Je veux utiliser l'opérateur d'affectation dans une compréhension de liste. Comment faire ?

Le code suivant est une syntaxe invalide. Je veux mettre lst[0] à une chaîne vide '' s'il correspond à pattern :

[ lst[0] = '' for pattern in start_pattern if lst[0] == pattern ]

Merci de votre attention !

0voto

Jamie Marshall Points 434

Si ce que vous voulez dire dans la question, c'est.. :

[ lst[0] = '' for lst in listOfLists if lst[0] == pattern ]

ou pour une liste de modèles

[ lst[0] = '' for lst in listOfLists if lst[0] in patterns ]

Cela peut se faire facilement

[ [''] + lst[1:] for lst in listOfLists if lst[0] == pattern ]

ou pour une liste de motifs

[[''] + lst[1:] for lst in listOfLists if lst[0] in patterns ]

0voto

ivanleoncz Points 1940

Ce n'est peut-être pas exactement ce que vous recherchez, mais je crois qu'il vaut la peine de présenter ce scénario.

Supposons que vous ayez un list de dictionnaires, comme celui-ci :

>>> fruits
[{'name': 'apple', 'quantity': 5}, {'name': 'banana', 'quantity': 4}]

Avec une compréhension normale de la liste, vous pouvez trouver l'objet que vous cherchez :

>>> [d for d in fruits if d['name'] == 'apple'] 
[{'name': 'apple', 'quantity': 5}]

Vous obtenez ainsi une liste avec un seul élément, grâce à la fonction if condition ci-dessus.

Par conséquent, vous pouvez indexer le seul élément, en accédant à l'une des clés du dictionnaire et en lui attribuant une valeur :

>>> [d for d in fruits if d['name'] == 'apple'][0]['quantity'] += 1

Voici le résultat :

>>> fruits
[{'name': 'apple', 'quantity': 6}, {'name': 'banana', 'quantity': 4}]

0voto

Je peux vous suggérer d'utiliser une classe au lieu d'utiliser des variables pour assigner des valeurs. Lorsque vous utilisez une classe, vous pouvez simplement modifier la valeur de la classe et renvoyer le résultat.

J'ai ajouté un exemple de ce que j'ai fait :

def foo():
class result:
    def __init__(self):
        self.key = 0
        self.value = 0

    def change(self, key, value):
        self.key= key
        self.value= value
        return key

result_object= result()
class_result= [result_object.change(key, value) for key, value in temp_dict.items() if value > result_object.value][-1]
return class_result

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X