0
votes

Comment combiner deux tableau dans une liste qui possède une liste intérieure?

J'avais deux liste: xxx

et je voulais obtenir: xxx

a et b corrélé l'un à l'autre, A [I] lié ​​à B [i] , lorsque la valeur dans a change comme 0 à 1 , 12 dans la première liste interne de C .

Je l'ai essayé avec si elle a échoué

Comment obtenir c en python?


1 commentaires

Montrez-nous comment vous feriez cela avec la liste Itération.


4 Réponses :


1
votes

Ce code produit c code> de manière suffisante (fourni A code> et b code> sont toujours ajustés de la même manière que dans l'exemple) :

a=[0,0,0,1,1,1,1,2,2]
b=[2,5,12,2,3,8,9,4,6]

c = []

i = 0

while i < len(a):
  d = a.count(a[i])
  c.append([a[i]] + b[i:i + d])
  i += d

print(c) # ==> [[0, 2, 5, 12], [1, 2, 3, 8, 9], [2, 4, 6]]


0 commentaires

0
votes

Nous pouvons zip code> les listes, groupe par première valeur à partir de A code> et faire des listes avec la seconde:

from itertools import groupby
from operator import itemgetter

a=[0,0,0,1,1,1,1,2,2]
b=[2,5,12,2,3,8,9,4,6]

[list(map(itemgetter(1), group)) for _, group in groupby(zip(a, b), key=itemgetter(0))]

#[[2, 5, 12], [2, 3, 8, 9], [4, 6]]


0 commentaires

0
votes

Semblable à la réponse de @thierry Lathuille, mais répeint actuellement les clés des sous-listes comme demandé par OP:

import itertools as it

ib = iter(b)
[[k, *(next(ib) for _ in gr)] for k, gr in it.groupby(a)]
# [[0, 2, 5, 12], [1, 2, 3, 8, 9], [2, 4, 6]]


0 commentaires

0
votes

Voici ma solution simple. Notez que vous fractionnez la liste par les chefs d'élimination de la liste A. La dentque est utilisée pour les éléments apparaissants dans O (1) heure de la gauche.

import itertools 
from collections import Counter, deque

a = [0,0,0,1,1,1,1,2,2]
b = deque([2,5,12,2,3,8,9,4,6])
c = Counter(a)

new_list=[] 
for x in c:
    new_list.append([x]+[b.popleft() for i in range(a[x])])


0 commentaires