我有數字0-9的四位數組排列,並且所有這些都存儲在一個大列表中。 (0, 1, 2, 3)(0, 1, 2, 4)(0, 1, 2, 5)(0, 1, 2, 6), etc
。Python中的位數排列
但是!我希望這些以不同的方式存儲。我想要0123, 0124, 0125, 1026, etc
。我如何才能將列表中的每個項目更改爲單個項目?
我有數字0-9的四位數組排列,並且所有這些都存儲在一個大列表中。 (0, 1, 2, 3)(0, 1, 2, 4)(0, 1, 2, 5)(0, 1, 2, 6), etc
。Python中的位數排列
但是!我希望這些以不同的方式存儲。我想要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'
使用列表理解與格式:
>>> 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']
假設 「數字」 的字符串(而不是整數),像這樣做:
result = map('{[0]}{[1]}{[2]}{[3]}'.format, longlist)
:
result = map(''.join, long_list)
或者這會爲字符串和整數工作
或者使用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]
兩個版本的整數,如果元素是字符串跳過映射到字符串:)
在舊版本的Python中添加這樣的字符串是O(n ** 2); '''.join()'是一個優秀的解決方案。 –
謝謝,Ignacio! – ravwojdyla
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']
這並不工作,但你介意解釋一下嗎?使用我上面提供的列表,它在輸出三位數字之前輸出四位數組。 – Linell
它將整數序列放入數千,數百,數十和單位中,方法是將當前值乘以10並添加新值。它輸出三位數字,因爲前導0不會被打印;如果這是一個問題,請使用第二個字符串,將數字格式化爲字符串。 –