2012-09-22 41 views
0

我有數字0-9的四位數組排列,並且所有這些都存儲在一個大列表中。 (0, 1, 2, 3)(0, 1, 2, 4)(0, 1, 2, 5)(0, 1, 2, 6), etcPython中的位數排列

但是!我希望這些以不同的方式存儲。我想要0123, 0124, 0125, 1026, etc。我如何才能將列表中的每個項目更改爲單個項目?

回答

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

這並不工作,但你介意解釋一下嗎?使用我上面提供的列表,它在輸出三位數字之前輸出四位數組。 – Linell

+0

它將整數序列放入數千,數百,數十和單位中,方法是將當前值乘以10並添加新值。它輸出三位數字,因爲前導0不會被打印;如果這是一個問題,請使用第二個字符串,將數字格式化爲字符串。 –

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

假設 「數字」 的字符串(而不是整數),像這樣做:

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

result = map(''.join, long_list) 

或者這會爲字符串和整數工作

或者使用itertools.imap()來獲得性能。

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] 

兩個版本的整數,如果元素是字符串跳過映射到字符串:)

+0

在舊版本的Python中添加這樣的字符串是O(n ** 2); '''.join()'是一個優秀的解決方案。 –

+0

謝謝,Ignacio! – ravwojdyla

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