我明白str.join()
:
>>> '|'.join(['1','2','3'])
'1|2|3'
有没有输出列表的东西?是否有一个函数会输出:
['1', '|', '2','|', '3']
也就是说,一个str.join()
for 列表?(或任何其他可迭代的?)
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]
这个怎么样?
>>> list('|'.join(['1','2','3']))
['1', '|', '2', '|', '3']
a = [1, 2, 'str', 'foo']
print [x for y in a for x in y, '|'][:-1]
# [1, '|', 2, '|', 'str', '|', 'foo']
对于一般情况,请考虑roundrobin
itertools 配方
这个简单的生成器避免了构建列表(更快,节省内存):
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']