-1
votes

Comment convertir des parties d'une grande liste et diviser dans des listes plus petites et plus simples?

J'ai une liste importante un exemple de cette liste serait la suivante:

list1 = ['1', '2', '3',]
list2 = ['4', '5', '6',]
list3 = ['7', '8', '9',]


4 commentaires

Pourront-il toujours être des listes de longueur égales?


aurez-vous seulement 1 caractère par article?


Quel était le problème quand vous avez essayé de le faire?


Aucune valeur dans chaque élément ne sera toujours différente devrait avoir spécifié. Les longueurs des listes peuvent être de 2-4 longues mais auront toujours un «X» pour séparer les nouvelles listes que je dois être séparée.


3 Réponses :


2
votes

Vous pouvez utiliser une liste temporaire pour stocker les valeurs entre «x», puis utiliser une condition pour rechercher «X» et charger la liste sur votre nouvel ensemble de liste

test_list = ['1', '2', '3', 'x', '4', '5', '6', 'x', '7', '8', '9', 'x']
idx_list = [idx + 1 for idx, val in enumerate(test_list) if val == 'x']
res = [test_list[i: j] for i, j in zip([0] + idx_list, idx_list +
       ([len(test_list)] if idx_list[-1] != len(test_list) else []))]

print(res)


0 commentaires

-1
votes

Vous pouvez le faire très efficacement en utilisant intelligemment des chaînes. Je convertit la liste en une chaîne afin que je puisse utiliser la fonction divisée qui le divise en sublistes en fonction d'une partie de la chaîne. Je ne convertit que ces retours aux listes et ignorez le dernier vide.

l = ['1', '2', '3', 'x', '4', '5', '6', 'x', '7', '8', '9', 'x']
s = "".join(l)
list1,list2,list3 = [list(substring) for substring in s.split('x')][:-1] #To skip the empty list from the trailing 'x'


3 commentaires

S'il vous plaît élaborer sur le bowvote?


Que se passe-t-il si les choses de la liste sont plus d'une personnalité?


Il serait effectivement mal à tort comme des éléments séparés du résultat final. Cependant, comme cela ne se produisait pas dans le cas de test, je (et beaucoup de réponses les plus récentes) ont supposé que tous les éléments étaient de longueur 1.



0
votes

Her'e une version légèrement plus générale à l'aide de GroupBy CODE> qui fonctionnera pour tous les Itérables:

from itertools import groupby

def split(iterable, delimiter):
    return [list(v) for k, v in groupby(iterable, delimiter.__eq__) if not k]

l = ['1', '2', '3', 'x', '4', '5', '6', 'x', '7', '8', '9', 'x']
print(split(l, 'x'))
# [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]


0 commentaires