Python 如何将元组列表转换为矩阵以进行列访问?

Python 如何将元组列表转换为矩阵以进行列访问?,python,list,tuples,Python,List,Tuples,我有一个元组列表: tups = [('a',5,'test'),('b', 8, 'test1')] 对于每个元组,我需要提取索引I处的值 显然,我可以迭代列表中的每个元组,得到我想要的值并将其放入数组中。。。然而,我认为应该有更好的方法 理想情况下,我希望将我的元组列表转换为矩阵或数据帧(或类似的东西),在这里我可以将列提取为数组 例如,使用上面的元组列表,我希望执行以下操作: matrix = tups.AsMatrix(ncols=len(tups[0])) #All tups hav

我有一个元组列表:

tups = [('a',5,'test'),('b', 8, 'test1')]
对于每个元组,我需要提取索引I处的值

显然,我可以迭代列表中的每个元组,得到我想要的值并将其放入数组中。。。然而,我认为应该有更好的方法

理想情况下,我希望将我的元组列表转换为矩阵或数据帧(或类似的东西),在这里我可以将列提取为数组

例如,使用上面的元组列表,我希望执行以下操作:

matrix = tups.AsMatrix(ncols=len(tups[0])) #All tups have the same number of values.
column_values = matrix[0]
print(column_values)
> 'a'
> 'b'

如何使用Python 3实现这一点?我看到Pandas有一个数据帧类型,但理想情况下,我不想使用其他库(numpy或本机python除外)来实现这一点。

这里有一些定制的本机python供您使用:

tups = [('a',5,'test'),('b', 8, 'test1')]

def fetcher(list_of_tups, ind):
    return [x[ind] for x in list_of_tups]

print(fetcher(tups, 0))  # ['a', 'b']
print(fetcher(tups, 1))  # [5, 8]

或者它的
lambda
版本,以获得一些独特的优点

试试这个:

import pandas as pd
tups = [('a',5,'test'),('b', 8, 'test1')]
df = pd.DataFrame(tups)
df 
输出:

   0  1      2
0  a  5   test
1  b  8  test1

使用
运算符

In [250]: import operator

In [252]: f = lambda l, i: list(map(operator.itemgetter(i), l))


如果您使用的是python2,请删除
列表(…)

“更好”是什么意思?如果您想做的唯一一件事是按索引提取元素,那么您当然不需要Dataframe。如果你想做一些计算/转换/分组/等等-是的,dataframe是一个很好的工具。很好的一个!我一直忘了
itemgetter
@COLDSPEED谢谢,这就是我想要的@pookie很乐意帮忙:)这比更多的Python列表理解快吗?@Giolelm不,但它们几乎是一样的。即使对于大于10000的非常大的数据,速度也会降低一小部分。嘿,列表也非常干净。很酷,谢谢!我喜欢lambda版本,非常简洁!
In [250]: import operator

In [252]: f = lambda l, i: list(map(operator.itemgetter(i), l))
In [253]: f(tups, 0)
Out[253]: ['a', 'b']

In [254]: f(tups, 1)
Out[254]: [5, 8]

In [255]: f(tups, 2)
Out[255]: ['test', 'test1']