如何获取二维列表中的每个第一个元素

Posted

技术标签:

【中文标题】如何获取二维列表中的每个第一个元素【英文标题】:How to get every first element in 2 dimensional list 【发布时间】:2015-07-15 17:53:16 【问题描述】:

我有一个这样的列表:

a = [[4.0, 4, 4.0], [3.0, 3, 3.6], [3.5, 6, 4.8]]

我想要这样的结果(每个列表中的第一个元素):

4.0, 3.0, 3.5

我试过a[::1][0],但没用

【问题讨论】:

这能回答你的问题吗? Extract first item of each sublist 【参考方案1】:

您可以从列表理解中的每个元素中获取索引[0]

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

【讨论】:

这似乎比 zip 方法干净得多。有什么理由不在 zip($*rows) 上使用它吗? 拆包的变体是[first for first, *_ in a]【参考方案2】:

使用邮编:

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]

编辑: zip 对象不可下标。需要转换为列表才能作为列表访问:

column = list(zip(*row))

【讨论】:

在python 3中,需要做list(zip(*rows)),否则不可下标。 感谢这个不错的解决方案。你能解释一下 zip(*rows) 是如何转置二维列表的吗?【参考方案3】:

你可以得到它像

[ x[0] for x in a]

这将返回a中每个列表的第一个元素的列表

【讨论】:

【参考方案4】:

比较三种方法

    2D 列表:5.323603868484497 秒 Numpy 库:0.3201274871826172 秒 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 作业执行一些列式处理时,它非常有用。

【讨论】:

【参考方案5】:

你可以用这个:

a = ((4.0, 4, 4.0), (3.0, 3, 3.6), (3.5, 6, 4.8))
a = np.array(a)
a[:,0]
returns >>> array([4. , 3. , 3.5])

【讨论】:

【参考方案6】:

如果你可以访问 numpy,

import numpy as np
a_transposed = a.T
# Get first row
print(a_transposed[0])

这种方法的好处是,如果你想要二维列表中的“第二个”元素,你现在要做的就是a_transposed[1]a_transposed 对象已经计算过了,所以不需要重新计算。

说明

在二维列表中查找第一个元素可以重新表述为在二维列表中查找第一列。因为您的数据结构是a list of rows,所以对每行第一个索引处的值进行采样的一种简单方法是转置矩阵并对第一个列表进行采样。

【讨论】:

【参考方案7】:

尝试使用

for i in a :
  print(i[0])

i 表示 a 中的单个行。所以,i[0] 表示每行的第一个元素。

【讨论】:

不按要求做。

以上是关于如何获取二维列表中的每个第一个元素的主要内容,如果未能解决你的问题,请参考以下文章

基于共同的第一个元素合并二维列表中的元素

python中的list元组如何按照第二维元素排序

python如何二删除二维或者三维数组/列表中某维的空元素

一个元素的二维数组列表进入java中的一维数组列表

使用条件从二维列表中获取特定元素

Python 二维列表,用sorted函数怎么多重排序?