sum
!J'ai réalisé que je pourrais écrire intelligemment si je pensais qu'il n'y avait qu'une manière délicate de le faire.
L'ajout de liste à liste est pris en charge en python
[1,2,3] + [4,5,6] => [1,2,3,4,5,6]
Profitant du fait que la fonction somme peut spécifier la valeur initiale du deuxième argument,
data = [[1,2,3], [4,5,6], [7,8,9]]
sum(data, [])
Vous pouvez écrire comme ça.
Cependant, il est un peu inflexible que les taples et les générateurs ne soient pas pris en charge à moins qu'il ne s'agisse d'une liste.
Dans la série python3, sum semble vérifier le type, donc cette méthode ne peut pas être utilisée. Je suis désolé.
En utilisant cela, je me suis demandé s'il serait possible de traiter toutes les instances qui implémentent __add__
avec sum.
>>> a = [1,2,3]
>>> data = [a, [4,5,6], [7,8,9]]
>>> sum(data,[])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a
[1, 2, 3]
>>> empty = []
>>> sum(data,empty)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> empty
[]
>>>
En interne, on s'attend à ce que le résultat de l'addition soit utilisé pour le traitement.
Donc, si vous réussissez une classe avec __add__
comme indiqué ci-dessous,
>>> class A:
... def __add__(self, target):
... self.target = target
... return 100
...
>>> a = A()
>>> sum([5,10,15,20],a)
145
>>> a.target
5
... Eh bien, je comprends que vous ne devriez pas faire de __add__
une implémentation destructrice.
Recommended Posts