9
votes

Généraliser l'ajout de listes imbriquées

donné 3 vecteurs imbriqués:

>>> [map(sum,zip(i,j,k)) for i,j,k in zip(a,b,c)]
[[111, 222, 333], [444, 555, 666], [777, 888, 999]]


4 commentaires

Sans bibliothèques externes tu veux dire? itTools peut être une importation utile


De plus, peut-il être généralisé à des niveaux arbitraires de nidification? (pas mon problème réel mais je viens de me survenir comme associé)


@ cricket_007 merci - c'est plus ce que je voulais dire. Je vais éditer la question.


@ paulw1128 Vous faites glisser vers la récursion avec vos pensées. Sois fils prudent. XD


3 Réponses :


3
votes

Cela devrait fonctionner:

lists = [a,b,c]
[map(sum,zip(*zipped_lists)) for zipped_lists in zip(*lists)]


0 commentaires

4
votes

Voici une approche générale: xxx

démo: xxx

Notez que depuis dans Python 2.7 zip Retourne une liste Il est préférable de l'utiliser lorsque vous souhaitez uniquement itérer les résultats, et utilisez plutôt ithertool.izip qui renvoie un itérateur.

Voici un autre moyen d'utiliser < code> ithertools.stamap () qui est plus rapide que l'approche précédente: xxx

référence: xxx


0 commentaires

3
votes

Si vous avez une liste de listes ( [A, B, C] CODE>), vous pouvez procéder comme suit:

>>> lists = [a,b,c]
>>> [map(sum, zip(*l)) for l in zip(*lists)]
[[111, 222, 333], [444, 555, 666], [777, 888, 999]]


0 commentaires