0
votes

Comment grouper une liste selon une autre liste dans laquelle chaque élément est une liste de valeurs?

J'ai deux listes de longueur égales xxx

J'aimerais regrouper la première liste en fonction de la deuxième liste. C'est-à-dire que le groupe doit être le même pour le X = 2,3 car les listes y correspondantes sont identiques. Le regroupement doit donc générer xxx

quel est le moyen le plus simple d'y parvenir?


8 commentaires

Veuillez coller votre sortie souhaitée pour une meilleure clarification


J'ai édité la représentation


Que se passera-t-il si la quantité d'élément dans le x plus grande que la quantité d'élément dans y ?


Les deux seront de longueur égale


Comment avez-vous décidé que la sortie n'est pas [[1], [2,3], [2,3]] ?


J'aimerais regrouper selon la deuxième liste, fondamentalement, les deux listes peuvent être considérées comme une carte, de la première liste à la seconde, de sorte que le regroupement est sur les valeurs.


La première liste contient-elle uniquement des entiers?


Non, cela peut également contenir d'autres listes imbriquées également, j'ai mis à jour une représentation


3 Réponses :


2
votes
x = [1,2,3]
y = [[7],[8,9],[8,9]]

output = []
values = []
for i, v in zip(x,y):
    if v in values:
        output[values.index(v)].append(i)
    else:
        output.append([i])
    values.append(v)

0 commentaires

2
votes

Je pense que le moyen le plus simple de le faire consiste à utiliser un dictionnaire.
Vous pouvez utiliser une représentation de chaîne de y elements comme clé
et associé x éléments sous forme de valeurs: xxx xxx


0 commentaires

2
votes

Utiliser : = code> pourrait faire la compréhension de la liste dans Python 3.8:

x = [1, [2], 3]
y = [[7], [8, 9], [8, 9]]


a = iter(x)
z = [[tmp for j in range(len(i)) if (tmp := next(a, None))] for i in y]
# [[1], [[2], 3], []]
output = [i for i in z if i] # remove [] in the list.
# [[1], [[2], 3]]


0 commentaires