0 から 9 までの 4 桁の順列があり、これらはすべて大きなリストに格納されています。
(0, 1, 2, 3)(0, 1, 2, 4)(0, 1, 2, 5)(0, 1, 2, 6), etc
.
しかし!別々に保管してほしい。欲しい0123, 0124, 0125, 1026, etc
。リスト内の各アイテムを 1 つのアイテムに結合するように変更するにはどうすればよいですか?
0 から 9 までの 4 桁の順列があり、これらはすべて大きなリストに格納されています。
(0, 1, 2, 3)(0, 1, 2, 4)(0, 1, 2, 5)(0, 1, 2, 6), etc
.
しかし!別々に保管してほしい。欲しい0123, 0124, 0125, 1026, etc
。リスト内の各アイテムを 1 つのアイテムに結合するように変更するにはどうすればよいですか?
>>> 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']
タプルの int または文字列に対して機能します。
>>> 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']
int が必要な場合は、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']