web-dev-qa-db-ja.com

Python 2次元リストのすべての最初の要素を取得する方法

私はこのようなリストを持っています:

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

このような結果が必要です([〜#〜] every [〜#〜]リストの最初の要素):

4.0, 3.0, 3.5

A [:: 1] [0]を試しましたが、機能しません

勉強を始めたばかりですPython数週間前。Pythonバージョン= 2.7.9

24
CodingBeginner

インデックスを取得できます[0]リスト内包表記の各要素から

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

また、ただつまらないために、listlistがなく、TupleTupleがあります。

43
CoryKramer

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

numpyを使用することもできます

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

あなたはそれを得ることができます

[ x[0] for x in a]

aの各リストの最初の要素のリストを返します

3
Eric Renouf

3つの方法を比較

  1. 2Dリスト:5.323603868484497秒
  2. Numpyライブラリ:0.3201274871826172秒
  3. Zip(Joran Beasleyに感謝):0.12395167350769043秒
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)

Zip方式が最適です。 numpyがインストールされていないクラスターサーバーでmapreduceジョブの列ごとのプロセスを実行しなければならなかった場合、非常に役に立ちました。

1
notilas