我有一个这样的清单:
a = ((4.0, 4, 4.0), (3.0, 3, 3.6), (3.5, 6, 4.8))
我想要这样的结果(每个列表中的第一个元素):
4.0, 3.0, 3.5
我尝试了[:: 1] [0],但它不起作用
我几周前才开始学习Python。 Python版本= 2.7.9
答案 0 :(得分:36)
您可以从列表理解中的每个元素获取索引a
[0]
另外,为了迂腐,你没有>>> [i[0] for i in a]
[4.0, 3.0, 3.5]
list
,list
tuple
。
答案 1 :(得分:19)
使用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]
答案 2 :(得分:3)
你可以像
那样得到它HospitalRecordsSystem
将返回[ x[0] for x in a]
答案 3 :(得分:3)
您可以使用此:
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])
答案 4 :(得分:1)
比较了三种方法
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 :(得分:0)
如果您有权访问numpy,
import numpy as np
a_transposed = a.T
# Get first row
print(a_transposed[0])
此方法的好处是,如果要在2d列表中使用“第二”元素,则现在要做的就是a_transposed[1]
。 a_transposed
对象已经计算完毕,因此您无需重新计算。
在2D列表中查找第一个元素可以改写为在2D列表中查找第一列。因为您的数据结构是a list of rows
,所以对每一行的第一个索引处的值进行采样的一种简单方法就是对矩阵进行转置并对第一个列表进行采样。
答案 6 :(得分:-1)
尝试使用
for i in a :
print(i[0])
i表示a.So中的单个行,i [0]重新表示每行的第1个元素。