Meilleure façon de mélanger les deux listes
Est-il de meilleures façons de manière aléatoire shuffle deux listes associées, sans briser leur correspondance dans l'autre liste? J'ai trouvé les questions associées dans numpy.array
et c#
mais pas exactement le même.
Comme un premier essai, une simple zip
truc va faire:
import random
a = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
b = [2, 4, 6, 8, 10]
c = zip(a, b)
random.shuffle(c)
a = [e[0] for e in c]
b = [e[1] for e in c]
print a
print b
Elle sera de sortie:
[[1, 2], [7, 8], [3, 4], [5, 6], [9, 10]]
[2, 8, 4, 6, 10]
Viens de trouver un peu maladroit. Et il a aussi besoin d'une liste supplémentaire ainsi.
- vous pouvez utiliser
zip
pour décompresser les listes ainsi:a,b = zip(*c)
- Je voudrais également, en général, de ne pas recommander un programme de conception où vous avez besoin de garder un jeu de parallèles listes. Il suffit de garder 1 de la liste. Créer une sorte de classe ou de quelque chose d'unifier vos données.
- Si l'on veut faire un tel travail par
numpy
, voici une bonne solution:stackoverflow.com/questions/4601373/...
InformationsquelleAutor clwen | 2012-08-01
Vous devez vous connecter pour publier un commentaire.
Compte tenu de la relation démontrée dans la question, je vais supposer que les listes sont de la même longueur et que
list1[i]
correspond àlist2[i]
pour tout indexi
. Avec cette hypothèse, en place, brouiller les listes est aussi simple que de brouiller les indices:Si vous êtes prêt à installer quelques paquets supplémentaires:
Req.:
NumPy (>= 1.6.1),
SciPy (>= 0.9).
pip install-U scikit-learn
Si vous avez à le faire souvent, vous pourriez envisager d'ajouter un niveau d'indirection en mélangeant une liste d'index.
Jusqu'à présent, toutes les solutions ont créé de nouvelles listes afin de résoudre le problème. Si les listes un et b sont très long, vous pouvez les mélanger à la place. Pour que vous avez besoin d'une fonction comme:
Une réponse rapide à l'aide de numpy, veuillez vous référer à ici:
Vous pouvez utiliser
Pour créer une nouvelle liste d'indices pour les deux listes et de les utiliser pour les réorganiser.
Dans votre scénario:
Je ne suis pas sûr si je suis absent quelque chose ici, mais il semble que vous êtes juste de brassage 1 de la liste et l'autre est réorganisé pour correspondre à l'ordre de la première liste. Donc, ce que vous avez est le meilleur moyen de le faire sans le rendre plus compliqué. Si vous voulez aller à la voie la plus compliquée, vous pouvez simplement shuffle 1 de la liste et utilisez les unshuffled liste pour faire une recherche dans le mélangées liste et la modifier dans ce sens. En fin de compte, vous vous retrouvez avec le même résultat que vous avez commencé avec. Pourquoi la création d'une troisième liste un problème? Si vous voulez vraiment recycler les listes, alors vous pouvez simplement remplacer la liste b, avec ce que vous êtes en utilisant pour la liste c, puis le séparer plus tard, retour à a et b.