python元组创建方式_Python:创建元组列表的优雅方式?

对于解决此问题的完全一般方法,您可以考虑使用flatten上的众多变体之一,您可以找到

here,其中flatten是一个函数,它采用任意嵌套的迭代迭代次数并返回其中包含的项目的平面列表.

然后只需在a,b,c的压缩值上展平并转换为元组.

>>> from collections import Iterable

>>> def flatten(l):

... for i in l:

... if isinstance(i, Iterable) and not isinstance(i, basestring):

... for sub in flatten(i):

... yield sub

... else:

... yield i

...

>>> map(tuple, map(flatten, zip(a, b, c)))

[('a', 0, 4, 5, 6, 7), ('a', 1, 9, 10, 11, 12),

('a', 2, 14, 15, 16, 17), ('a', 3, 19, 20, 21, 22)]

或者更简洁,修改flatten以接受任意参数列表并返回元组.然后你需要的只是地图:

>>> def flat_tuple(*args):

... return tuple(flatten(args))

...

>>> map(flat_tuple, a, b, c)

[('a', 0, 4, 5, 6, 7), ('a', 1, 9, 10, 11, 12),

('a', 2, 14, 15, 16, 17), ('a', 3, 19, 20, 21, 22)]

如果这是一次性问题,上述方法可能比它的价值更麻烦.但是,如果您已经为其他目的定义了flatten,或者如果您经常这样做,以上可以为您节省很多麻烦!

否则,只是为了它的乐趣,这里是我喜欢的nneonneo答案的变体:

>>> [x + tuple(y) for x, y in zip(zip(a, b), c)]

[('a', 0, 4, 5, 6, 7), ('a', 1, 9, 10, 11, 12),

('a', 2, 14, 15, 16, 17), ('a', 3, 19, 20, 21, 22)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值