我有数字 0-9 的四位排列,所有这些都存储在一个大列表中。
(0, 1, 2, 3)(0, 1, 2, 4)(0, 1, 2, 5)(0, 1, 2, 6), etc
.
但!我希望这些以不同的方式存储。我想要0123, 0124, 0125, 1026, etc
。如何更改使列表中的每个项目加入单个项目?
我有数字 0-9 的四位排列,所有这些都存储在一个大列表中。
(0, 1, 2, 3)(0, 1, 2, 4)(0, 1, 2, 5)(0, 1, 2, 6), etc
.
但!我希望这些以不同的方式存储。我想要0123, 0124, 0125, 1026, etc
。如何更改使列表中的每个项目加入单个项目?
>>> reduce(lambda x, y: x * 10 + y, (0, 1, 2, 3))
123
>>> '%04d' % (reduce(lambda x, y: x * 10 + y, (0, 1, 2, 3)),)
'0123'
假设“数字”是字符串(而不是整数),请这样做:
result = map(''.join, long_list)
或者,这适用于字符串和整数:
result = map('{[0]}{[1]}{[2]}{[3]}'.format, longlist)
或者使用 itertools.imap() 来提高性能。
试试这个:
[ reduce(lambda x,y: str(x) + str(y), list) for list in lists]
加入版:
[ reduce(lambda x,y: ''.join((x,y)), map(str,list)) for list in lists]
整数的两个版本,如果元素是字符串跳过映射到字符串:)
使用带有格式的列表推导:
>>> l=[(0, 1, 2, 3), (0, 1, 2, 4), (0, 1, 2, 5), (0, 1, 2, 6)]
>>> ['{}{}{}{}'.format(*t) for t in l]
['0123', '0124', '0125', '0126']
适用于元组中的整数或字符串:
>>> l=[(0, 1, 2, 3), (0, 1, 2, 4), (0, 1, 2, 5), (0, 1, '2', 6)]
>>> ['{}{}{}{}'.format(*t) for t in l]
['0123', '0124', '0125', '0126']
如果你想要整数,你可以在 LC 的输出上使用 map:
>>> map(int,['{}{}{}{}'.format(*t) for t in l])
[123, 124, 125, 126]
join
如果元组可能是可变长度的,则使用:
>>> l=[(0, 1, 2, 3), (0, 1, 2, 4), (0, 1, 2, 5), (0, 1, '2')]
>>> [''.join(map(str,t)) for t in l]
['0123', '0124', '0125', '012']
In [11]: seq = [(0, 1, 2, 3), (0, 1, 2, 4), (0, 1, 2, 5), (0, 1, 2, 6)]
In [12]: [''.join(map(str, item)) for item in seq]
Out[12]: ['0123', '0124', '0125', '0126']