我有一个元组列表:
tups = [('a',5,'test'),('b', 8, 'test1')]
对于每个元组,我需要在索引i处提取值。
显然,我可以遍历列表中的每个元组,获取我追求的值并将其弹出到数组中......但是,我认为应该有一个更好的方法。
理想情况下,我想将我的元组列表转换为矩阵或DataFrame(或类似的东西),我可以将列提取为数组。
例如,使用上面的元组列表,我想做类似以下的事情:
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有一个DataFrame类型,但理想情况下我想在不使用其他库(除了numpy或native python之外)的情况下这样做。
答案 0 :(得分:5)
使用operator
:
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']
如果你正在使用python2,请删除list(...)
。
答案 1 :(得分:3)
以下是一些自定义的原生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
版本
f = lambda cont, i: [x[i] for x in cont]
print(f(tups, 1)) # [5, 8]
答案 2 :(得分:2)
试试这个:
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