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 回答