web-dev-qa-db-fra.com

Python Comment obtenir tous les premiers éléments d'une liste à 2 dimensions

J'ai une liste comme celle-ci:

a = ((4.0, 4, 4.0), (3.0, 3, 3.6), (3.5, 6, 4.8))

Je veux un résultat comme celui-ci ( TOUS LES premier élément de la liste):

4.0, 3.0, 3.5

J'ai essayé un [:: 1] [0], mais ça ne marche pas

Je commence tout juste à apprendre Python il y a quelques semaines. Python version = 2.7.9

24
CodingBeginner

Vous pouvez obtenir l'index [0] de chaque élément d'une compréhension de liste

>>> [i[0] for i in a]
[4.0, 3.0, 3.5]

Aussi, juste pour être pédant, vous n'avez pas un list de list, vous avez un Tuple de Tuple.

43
CoryKramer

utiliser Zip

columns = Zip(*rows) #transpose rows to columns
print columns[0] #print the first column
#you can also do more with the columns
print columns[1] # or print the second column
columns.append([7,7,7]) #add a new column to the end
backToRows = Zip(*columns) # now we are back to rows with a new column
print backToRows

vous pouvez aussi utiliser numpy

a = numpy.array(a)
print a[:,0]
24
Joran Beasley

Vous pouvez l'obtenir comme

[ x[0] for x in a]

qui retournera une liste du premier élément de chaque liste dans a

3
Eric Renouf

Comparé les 3 méthodes

  1. Liste 2D: 5.3236038684844979 secondes
  2. Bibliothèque Numpy: 0.3201274871826172 secondes
  3. Zip (Merci à Joran Beasley): 0.12395167350769043 secondes
D2_list=[list(range(100))]*100
t1=time.time()
for i in range(10**5):
    for j in range(10):
        b=[k[j] for k in D2_list]
D2_list_time=time.time()-t1

array=np.array(D2_list)
t1=time.time()        
for i in range(10**5):
    for j in range(10):
        b=array[:,j]        
Numpy_time=time.time()-t1

D2_trans = list(Zip(*D2_list)) 
t1=time.time()        
for i in range(10**5):
    for j in range(10):
        b=D2_trans[j]
Zip_time=time.time()-t1

print ('2D List:',D2_list_time)
print ('Numpy:',Numpy_time)
print ('Zip:',Zip_time)

La méthode Zip fonctionne mieux. C’était très utile lorsque je devais effectuer quelques processus relatifs aux colonnes pour les tâches de calcul dans les serveurs de cluster sur lesquels numpy n’était pas installé.

1
notilas