1
votes

Python - comment mettre certains éléments du tableau dans d'autres tableaux en fonction de l'index

J'ai une liste test = [a, b, c, d, e, f, g, h, i] , je veux mettre ces éléments dans trois listes vides (list1 = [ ], list2 = [], list3 = []) en fonction des heures d'index

Résultat attendu: list1 = [a, d, g], list2 = [b, e, h], list3 = [c, f, i] , leurs index sont index1 = [0,3,6] index2 = [1,4,7] index3 = [2,5,8] , en fait indexs_list ne sont pas définis, je veux juste les utiliser pour bien décrire la question < / p>

Je n'ai pas d'idée, est-ce que je peux m'aider?


1 commentaires

Voulez-vous aussi les listes «d'index», ou s'agit-il simplement d'afficher les numéros d'index pertinents? Si vous les voulez, les structures de dictionnaire seraient-elles appropriées pour associer des lettres à des index? Enfin, voulez-vous faire cela d'une manière générique qui fonctionnera pour n'importe quel nombre de listes cibles ou simplement pour résoudre cet exemple spécifique?


4 Réponses :


1
votes

Avec numpy :

>>> print(l1,l2,l3)
['a' 'd' 'g'] ['b' 'e' 'h'] ['c' 'f' 'i']

Sorties:

import numpy as np

l1,l2,l3=np.array(test).reshape(3,-1, order='F')

Réf: https://docs.scipy.org/doc/numpy/ reference / generated / numpy.reshape.html


0 commentaires

2
votes

Utilisation de vanilla python:

['a', 'd', 'g']
['b', 'e', 'h']
['c', 'f', 'i']

Sortie:

test=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

my_lists = [[], [], []]
for mod in range(3):
    my_lists[mod] = [elem for i, elem in enumerate(test) if i % 3 == mod]

list0 = my_lists[0]
list1 = my_lists[1]
list2 = my_lists[2]

print(list0, list1, list2)


1 commentaires

Gardez à l'esprit que cette solution ne fonctionne que pour ces listes d'index spécifiques (et pour ces listes spécifiques, une solution plus simple est possible). En général, cette solution ne fonctionne pas.



1
votes

Une compréhension de liste suffit, bien que ce ne soit pas la solution la plus efficace (itère dans la liste trois fois) et ne fonctionne que si vous avez un nombre fixe de listes d'index:

list1, list2, list3 = [[test[i] for i in index ] 
                       for index in (index1, index2, index3)]


0 commentaires

1
votes

J'imagine que vous commencez avec Python.

Pour cette raison, je voudrais suggérer une solution très simple en utilisant simplement les bases de Python:

list_1:
['a', 'd', 'g']

list_2:
['b', 'e', 'h']

list_3:
['c', 'f', 'i']

Sortie

list_1_indexes = [0,3,6]
list_2_indexes = [1,4,7]
list_3_indexes = [2,5,8]

test=["a", "b", "c", "d", "e", "f", "g", "h", "i"]

list_1 = []
list_2 = []
list_3 = []

for index in list_1_indexes:
    list_1.append(test[index])

for index in list_2_indexes:
    list_2.append(test[index])

for index in list_3_indexes:
    list_3.append(test[index])


print("list_1:")
print(list_1)
print("\nlist_2:")
print(list_2)
print("\nlist_3:")
print(list_3)


0 commentaires