4

了解しましたstr.join():

>>> '|'.join(['1','2','3'])
'1|2|3'

リストを出力するものはありますか?出力する関数はありますか:

['1', '|', '2','|', '3']

つまり、str.join()for リスト? (または他のイテラブル?)

4

4 に答える 4

5
list('|'.join(['1','2','3']))

文字のリストを操作している場合は、トリックを実行する必要があります。

すべてのオブジェクトで機能する、より一般的なソリューションは次のとおりです。

from itertools import izip_longest, chain

def intersperse(myiter, value):
    return list(
        chain.from_iterable(izip_longest(myiter, [], fillvalue=value))
    )[:-1]

この関数の組み込み/標準ライブラリ バージョンについては知りません。

実際に:

print intersperse([1,2,3], '|')

出力:

[1, '|', 2, '|', 3]
于 2012-11-04T00:13:10.213 に答える
2

これはどう?

>>> list('|'.join(['1','2','3']))
['1', '|', '2', '|', '3']
于 2012-11-04T00:13:12.630 に答える
1
a = [1, 2, 'str', 'foo']
print [x for y in a for x in y, '|'][:-1]
# [1, '|', 2, '|', 'str', '|', 'foo']

一般的なケースでは、roundrobin itertools レシピを検討してください

于 2012-11-04T00:58:10.370 に答える
0

この単純なジェネレーターは、リストの作成を回避します (より速く、メモリを節約します)。

def intersperse(iterable, element):
    iterable = iter(iterable)
    yield next(iterable)
    while True:
        next_from_iterable = next(iterable)
        yield element
        yield next_from_iterable

例:

>>> list(intersperse(['1', '2', '3'], '|'))
['1', '|', '2', '|', '3']
于 2012-12-27T10:46:59.777 に答える