web-dev-qa-db-ja.com

pythonリスト内包表記でタプルを解凍します(*演算子は使用できません)

同じ値を3回連続して繰り返し、別のリストに基づいてリストを作成しようとしています。

現在、私は以下を使用しています:

_>>> my_list = [ 1, 2 ]
>>> three_times = []
>>> for i in range( len( my_list ) ):
...   for j in range( 3 ):
...     three_times.append( my_list[ i ] )
...
>>> print three_times
[1, 1, 1, 2, 2, 2]
_

しかし、私は次のようなよりPythonicな方法を使用してそれを実行したいと思います。

_>>> my_list = [ 1, 2 ]
>>> three_times = []
>>> three_times = [ (value,) * 3 for value in my_list ]
>>> print three_times
[(1, 1, 1), (2, 2, 2)]
_

しかし、タプルを解凍する方法が見つかりません。

three_times = [ *( (value,) * 3 ) for value in my_list ]のようなものはタプルを解凍するのに最適ですが、これは正しい構文ではありません。

15
DRz

リスト内包表記で*反復可能なアンパックを使用することはできません。その構文は呼び出しでのみ使用でき、割り当てを使用する場合はPython 3)で使用できます。

リスト内包表記を使用する場合は、forループを直列に配置するだけです。ただし、インデックスを生成するのではなく、my_listから値に直接アクセスする必要があります。

[v for v in my_list for _ in range(3)]
17
Martijn Pieters