如何将元组转换为元组元组?

时间:2012-01-12 14:27:25

标签: python tuples

我如何转换它:

(1, 315.0, 2, 30.399999618530273, 3, 1.1033999919891357, 4, 8.0)

进入这个:

((1, 315.0), (2, 30.399999618530273), (3, 1.1033999919891357), (4, 8.0))

是否有一种简单的方法可以在不循环的情况下完成?

3 个答案:

答案 0 :(得分:16)

>>> x = (1, 315.0, 2, 30.399999618530273, 3, 1.1033999919891357, 4, 8.0)
>>> tuple(zip(x[::2], x[1::2]))
((1, 315.0), (2, 30.399999618530273), (3, 1.1033999919891357), (4, 8.0))

答案 1 :(得分:10)

t = (1, 315.0, 2, 30.399999618530273, 3, 1.1033999919891357, 4, 8.0)
print tuple(zip(*[iter(t)] * 2))

编辑:为了使其更具可读性,它应该封装在grouper() recipes中的itertools函数之类的函数中:

def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

答案 2 :(得分:4)

我会选择发电机:

def pairs( tup ):
    t = iter(tup)
    while True: yield t.next(), t.next()

a = (1, 315.0, 2, 30.399999618530273, 3, 1.1033999919891357, 4, 8.0)
for p in pairs(a): print p

因为它更冗长,可能更快(实际上没有分配配对列表)。

修改

阅读解决方案的时间要短得多:

t = iter(a)
print zip(t, t)