次のリストがあるとします。
a = [[1.0, 1.2, 1.4], [2.0, 2.2], 5.0]
入手方法:
s = '1.0 1.2 1.4 2.0 2.2 5.0
反復不可能な最後のメンバーが原因で失敗しないjoin()、map()、またはリスト内包表記から何かを構築できないようです。
次のリストがあるとします。
a = [[1.0, 1.2, 1.4], [2.0, 2.2], 5.0]
入手方法:
s = '1.0 1.2 1.4 2.0 2.2 5.0
反復不可能な最後のメンバーが原因で失敗しないjoin()、map()、またはリスト内包表記から何かを構築できないようです。
このソリューションは少しハックですが、最小限の労力で仕事をします
>>> a = [[1.0, 1.2, 1.4], [2.0, 2.2], 5.0]
>>> str(a)
'[[1.0, 1.2, 1.4], [2.0, 2.2], 5.0]'
>>> str(a).translate(None,'[],')
'1.0 1.2 1.4 2.0 2.2 5.0'
>>> a = [[1.0, 1.2, 1.4], [2.0, 2.2], 5.0]
>>> ' '.join(str(s) for x in a for s in (x if isinstance(x, list) else [x]))
'1.0 1.2 1.4 2.0 2.2 5.0'
これは、動作が次のforループと同等です。
tmp = []
for x in a:
if isinstance(x, list):
for s in x:
tmp.append(s)
else:
tmp.append(x)
result = ' '.join(tmp)
これは、例のように、ネストのレベルが1つだけであることを前提としていることに注意してください。値が文字列でない限り、リストだけでなく任意の反復可能オブジェクトを処理するためにこれが必要な場合collections.Iterable
(そうでない場合は、文字列内の文字を反復処理します)。
私は行くだろう:
a = [[1.0, 1.2, 1.4], [2.0, 2.2], 5.0]
def try_iter(item):
try:
return iter(item)
except:
return (item,)
from itertools import chain
print ' '.join(str(s) for s in chain.from_iterable(map(try_iter, a)))