如何在这个元组上执行操作并转换为Python中的另一个元组?

时间:2014-02-27 10:14:27

标签: python python-2.7

我有一个类似于( (Col1, x, x), (Col2, x, x), (Col3, x, x) )的元组元组 我想将它转换为另一个看起来像(Col1, Col2, Col3)的元组。

如何做到这一点?

我正在使用Python 2.7。谢谢。

4 个答案:

答案 0 :(得分:5)

当您需要“转置”列表或类似内容时,请考虑zip。试试这个:

a = ( ('Col1', 1, 11), ('Col2', 2, 22), ('Col3', 3, 33) )
print zip(*a)[0]

输出:

('Col1', 'Col2', 'Col3')

编辑更多细节:

*运算符在Python中用于unpack argument lists。换句话说,上述zip(*a)实际上转换为

zip(('Col1', 1, 11), ('Col2', 2, 22), ('Col3', 3, 33))

导致

[('Col1', 'Col2', 'Col3'), (1, 2, 3), (11, 22, 33)]

如果将其视为矩阵,它看起来像原始元组的转置。通过[0]抓取压缩输出的第一个元素,从而得到所需的输出。

答案 1 :(得分:2)

tup_tuples = (("Col1", "x", "x"), ("Col2", "x", "x"), ("Col3", "x", "x") )
print tuple(first for first, _, _ in tup_tuples)
# ('Col1', 'Col2', 'Col3')

答案 2 :(得分:2)

尝试以下方法:

tuple(x[0] for x in big_tuple)

示例:

>>> big_tuple = ((0,1,1), (1,0,0), (2,3,3))
>>> tuple(x[0] for x in big_tuple)
(0, 1, 2)
>>> 

答案 3 :(得分:1)

试试这个:

tuples = ( (Col1, x, x), (Col2, x, x), (Col3, x, x) )
filtered = tuple(t[0] for t in tuples)