Python中的数字排列

Python中的数字排列,python,string,permutation,Python,String,Permutation,我有数字0-9的四位数排列,所有这些都存储在一个大列表中。 0,1,2,30,1,2,40,1,2,50,1,2,6等 但是!我希望这些文件以不同的方式存储。我想要0123、0124、0125、1026等。如何更改以使列表中的每个项目合并为单个项目?使用具有以下格式的列表理解: >>> l=[(0, 1, 2, 3), (0, 1, 2, 4), (0, 1, 2, 5), (0, 1, 2, 6)] >>> ['{}{}{}{}'.format(*t) fo

我有数字0-9的四位数排列,所有这些都存储在一个大列表中。 0,1,2,30,1,2,40,1,2,50,1,2,6等


但是!我希望这些文件以不同的方式存储。我想要0123、0124、0125、1026等。如何更改以使列表中的每个项目合并为单个项目?

使用具有以下格式的列表理解:

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

假设数字是字符串而不是整数,按如下方式执行:

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]

如果元素是字符串,则这两个版本都适用于整数:

这确实有效,但您介意解释一下吗?使用我上面提供的列表,它在得到四位数字排列之前输出三位数字。它获取整数序列,将当前值乘以10,再加上新值,将它们放在千、百、十和单位位置。它输出三位数,因为没有打印前导0;如果出现问题,请使用第二个,它将数字格式化为字符串。在较早版本的Python上,在**2上可以添加类似的字符串。join是一个更好的解决方案。
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']
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']