Python 如何获取二维列表中的每个第一个元素
我有这样一份清单:Python 如何获取二维列表中的每个第一个元素,python,list,multidimensional-array,Python,List,Multidimensional Array,我有这样一份清单: a = [[4.0, 4, 4.0], [3.0, 3, 3.6], [3.5, 6, 4.8]] 我想要这样的结果(列表中的每个第一个元素): 我尝试了a[::1][0],但它不起作用你可以像这样得到它 [ x[0] for x in a] 它将返回a中每个列表的第一个元素的列表。您可以从列表中的每个元素获取索引[0] >>> [i[0] for i in a] [4.0, 3.0, 3.5] 也只是为了学究,你没有list的list,你有tuple
a = [[4.0, 4, 4.0], [3.0, 3, 3.6], [3.5, 6, 4.8]]
我想要这样的结果(列表中的每个第一个元素):
我尝试了a[::1][0]
,但它不起作用你可以像这样得到它
[ x[0] for x in a]
它将返回
a
中每个列表的第一个元素的列表。您可以从列表中的每个元素获取索引[0]
>>> [i[0] for i in a]
[4.0, 3.0, 3.5]
也只是为了学究,你没有list
的list
,你有tuple的tuple
,使用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]
编辑:
zip对象不可下标。需要将其转换为列表才能访问为列表:
column = list(zip(*row))
试用
for i in a :
print(i[0])
i表示a中的单个行。因此,i[0]表示每行的第一个元素。比较了3种方法
2D列表:5.3236038684497秒
Numpy库:0.3201274871826172秒
Zip(感谢Joran Beasley):0.12395167350769043秒
D2_list=[list(范围(100))]*100
t1=时间。时间()
对于范围(10**5)内的i:
对于范围(10)内的j:
b=[k[j]表示D2_列表中的k]
D2_list_time=time.time()-t1
数组=np.数组(D2\U列表)
t1=时间。时间()
对于范围(10**5)内的i:
对于范围(10)内的j:
b=数组[:,j]
Numpy\u time=时间.time()-t1
D2_trans=列表(zip(*D2_列表))
t1=时间。时间()
对于范围(10**5)内的i:
对于范围(10)内的j:
b=D2_trans[j]
Zip_time=time.time()-t1
打印('2D列表:',D2列表\时间)
打印('Numpy:',Numpy\u时间)
打印('Zip:',压缩时间)
Zip方法效果最好。
当我不得不在没有安装numpy的集群服务器中为mapreduce作业执行一些列式处理时,它非常有用 你可以用这个:
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])
如果你有权访问numpy
将numpy导入为np
a_转置=a.T
#坐第一排
打印(a_转置[0])
这种方法的好处是,如果您想要2d列表中的“第二个”元素,现在只需a_transposed[1]
。a_transposed
对象已计算,因此无需重新计算
描述
查找二维列表中的第一个元素可以重新表述为查找二维列表中的第一列。因为您的数据结构是一个行列表
,所以对每行第一个索引处的值进行采样的简单方法就是转置矩阵并对第一个列表进行采样。在这种情况下,您可能还应该返回一个元组。尝试将生成器表达式传递到tuple
关键字中。这似乎比zip方法更简洁。有什么理由不使用这个over-zip($*行)吗?在Python3中,您需要使用do-list(zip(*rows)),否则它是不可订阅的。感谢这个很好的解决方案。你能解释一下zip(*行)是如何转换2D列表的吗?这不符合要求。这能回答你的问题吗?
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])