7
votes

Python-commander une liste de sorte que x suit y et y suit x

Alors j'utilise la méthode de la chaîne Python pour combiner deux querySets (listes) dans Django comme ceci. XXX

Lorsque des données et des tweets sont deux listes distinctes. J'ai maintenant une liste "résultats" avec les données et les objets Tweet que je veux commandé dans cette mode. xxx

Quel est le meilleur moyen d'atteindre ce type de commande? J'ai essayé d'utiliser au hasard. Mais ce n'est pas ce que je veux.


2 commentaires

Je ne sais pas ce que vous voulez: 1. Résultats = [Data [0], Tweets [0], Data [1], Tweets [1], ...] ou 2. Résultats = [Données [0], Données [1], ..., données [n], tweets [0], ..., Tweets [n], données [0], données [1], ...]


Êtes-vous sûr que c'est le format de sortie que vous voulez? zip (données, tweets) ne pas être plus utile ici?


3 Réponses :


6
votes

Vous pouvez utiliser itertools.chain.from_iterable et zip : xxx

Utilisez iTERTOOL.IFIP Pour une solution efficace de mémoire.


6 commentaires

AH, de_itétable est le moyen élégant d'aplatir la liste zippée que j'étais manquante.


@Oleg, pas si les listes sont très longues (ce qui est probable dans ce cas)


Depuis que nous inscrivons des alternatives inférieures, (v pour T dans zip (données, tweets) pour V dans T)


@ERIC, vous devriez poster cela comme une réponse distincte. Le vôtre est le plus lisible du lot. Et izip à la place de zip devrait prendre en charge les grandes listes d'entrée


@Oleg, pourquoi pensez-vous qu'il coupe la liste à cinq? Parce que l'analyse des tweets est généralement effectuée avec d'énormes jeux de données, ce qui est à l'illustration.


@alexis vous avez complètement raison, j'ai supprimé tous mes commentaires qu'ils peuvent confondre quelqu'un



2
votes

Vous pouvez le faire de cette façon:

>>> result = [None]*(len(data)+len(tweets))
>>> result[::2] = data
>>> result[1::2] = tweets


0 commentaires

5
votes

Voici une solution à l'aide d'itérateurs:

from itertools import izip
result = (v for t in izip(data, tweets) for v in t)


1 commentaires

C'est bien: il n'est pas évident que l'alternance des paires zippées ne suffit que l'aplatissement.