J'essaie d'utiliser la compréhension de liste pour remplacer la boucle for.
le fichier d'origine est
2 3 4 5 6 3
1 2 2 4 5 5
1 2 2 2 2 4
for loop
line_number = 0
for line in file:
line_data = line.split()
Cordi[line_number, :5] = line_data
line_number += 1
la sortie est
[[2 3 4 5 6 3]
[1 2 2 4 5 5]
[1 2 2 2 2 4]]
si j'utilise la compréhension de liste à la place, pour ce que je peux penser, c'est (je dois changer le type de données en int, afin qu'il puisse être tracé dans la partie ultérieure du programme)
Cordi1= [int(x) for x in line.split() for line in data]
mais la sortie est
[1, 1, 1]
mais line.split() for line in data
est en fait une liste, et si j'essaye
Cordi1 = [int(x) for x in name of the list]
ça marche, pourquoi ça arrive?
Vous avez échangé l'ordre de vos boucles; ils doivent être ordonnés de la même manière qu'ils seraient imbriqués, de gauche à droite:
[int(x) for line in data for x in line.split()]
Cela boucle d'abord sur data
, puis pour chaque line
itération, itère sur line.split()
pour produire x
. Vous produisez ensuite une flat liste d'entiers à partir de ceux-ci.
Cependant, puisque vous essayez de construire une liste de listes, vous devez imbriquer une compréhension de liste dans une autre:
Cordi1 = [[int(i) for i in line.split()] for line in data]
Démo:
>>> data = '''\
... 2 3 4 5 6 3
... 1 2 2 4 5 5
... 1 2 2 2 2 4
... '''.splitlines()
>>> [int(x) for line in data for x in line.split()]
[2, 3, 4, 5, 6, 3, 1, 2, 2, 4, 5, 5, 1, 2, 2, 2, 2, 4]
>>> [[int(i) for i in line.split()] for line in data]
[[2, 3, 4, 5, 6, 3], [1, 2, 2, 4, 5, 5], [1, 2, 2, 2, 2, 4]]
Si vous vouliez un tableau numpy multidimensionnel à partir de cela, vous pouvez soit convertir ce qui précède directement en tableau ou créer un tableau à partir des données, puis remodeler:
>>> import numpy as np
>>> np.array([[int(i) for i in line.split()] for line in data])
array([[2, 3, 4, 5, 6, 3],
[1, 2, 2, 4, 5, 5],
[1, 2, 2, 2, 2, 4]])
>>> np.array([int(i) for line in data for i in line.split()]).reshape((3, 6))
array([[2, 3, 4, 5, 6, 3],
[1, 2, 2, 4, 5, 5],
[1, 2, 2, 2, 2, 4]])