2

次のリストがあるとします。

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()、またはリスト内包表記から何かを構築できないようです。

4

3 に答える 3

4

このソリューションは少しハックですが、最小限の労力で仕事をします

>>> 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'
于 2013-03-26T16:46:56.903 に答える
1
>>> 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(そうでない場合は、文字列内の文字を反復処理します)。

于 2013-03-26T16:35:44.820 に答える
0

私は行くだろう:

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)))
于 2013-03-26T16:37:18.627 に答える