Python中数字的排列

时间:2012-09-22 15:37:58

标签: python string permutation

我有数字0-9的四位数排列,所有这些都存储在一个大列表中。 (0, 1, 2, 3)(0, 1, 2, 4)(0, 1, 2, 5)(0, 1, 2, 6), etc

但是!我希望这些存储方式不同。我想要0123, 0124, 0125, 1026, etc。如何更改将列表中的每个项目合并为一个项目?

5 个答案:

答案 0 :(得分:8)

>>> 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'

答案 1 :(得分:3)

假设“数字”是字符串(而不是整数),请按以下方式执行:

result = map(''.join, long_list)

或者这适用于字符串和整数:

result = map('{[0]}{[1]}{[2]}{[3]}'.format, longlist)

或者使用itertools.imap()来提高性能。

答案 2 :(得分:3)

试试这个:

[ 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]

两个版本的整数,如果元素是字符串跳过映射到字符串:)

答案 3 :(得分:2)

使用格式为的列表理解:

>>> 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']

答案 4 :(得分:1)

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']