具体来说,我有两个字符串列表,我想将它们组合成一个字符串,其中每一行是列表中的下两个字符串,用空格分隔:
a = ['foo1', 'foo2', 'foo3']
b = ['bar1', 'bar2', 'bar3']
我想要一个返回的函数combine_to_lines():
"""foo1 bar1
foo2 bar2
foo3 bar3"""
我承认我已经解决了这个问题,所以我要发布答案。但也许其他人有一个更好的或看到我的缺陷。
更新:我过度简化了上面的示例。在我的实际问题中,行以更复杂的方式格式化,需要从zip()返回的元组被解压缩。但感谢mhawke提出最简单的解决方案。
答案 0 :(得分:14)
没有必要解压缩并重新打包zip返回的元组:
'\n'.join(' '.join(x) for x in zip(a, b))
答案 1 :(得分:9)
zip function“返回一个元组列表,其中第i个元组包含来自每个参数序列或迭代的第i个元素。”
def combine_to_lines(list1, list2):
return '\n'.join([' '.join((a, b)) for a, b in zip(list1, list2)])
答案 2 :(得分:7)
>>> a = ['foo1', 'foo2', 'foo3']
>>> b = ['bar1', 'bar2', 'bar3']
>>> for i in zip(a,b):
... print ' '.join(i)
...
foo1 bar1
foo2 bar2
foo3 bar3
答案 3 :(得分:1)
您是否在询问zip功能?
答案 4 :(得分:1)
我意识到这是一个非常古老的问题,但值得注意的是,这可以被视为matrix transposition。
>>> import numpy
>>> data = numpy.array([['foo1','foo2','foo3'],['bar1','bar2','bar3']])
>>> print(data)
[['foo1' 'foo2' 'foo3']
['bar1' 'bar2' 'bar3']]
>>> print(data.transpose())
[['foo1' 'bar1']
['foo2' 'bar2']
['foo3' 'bar3']]
如果您正在处理大型数据集或更多列表,这可能是一种更有效的解决方案。
答案 5 :(得分:0)
这是一个单行。如果你这么倾向可以做x + ' ' + y
,不确定它是否会变慢。
>>> a = ['foo1', 'foo2' , 'foo3']
>>> b = ['bar1', 'bar2', 'bar3']
>>> '\n'.join(' '.join([x,y]) for (x,y) in zip(a,b))
'foo1 bar1\nfoo2 bar2\nfoo3 bar3'
>>> print _
foo1 bar1
foo2 bar2
foo3 bar3
答案 6 :(得分:0)
'\n'.join(((str(x) + ' ' + str(y)) for (x, y) in zip(a, b)))
答案 7 :(得分:0)
简单如下:
" ".join([a[x] + " " + b[x] for x in range(len(a))])
答案 8 :(得分:0)
在python 3.x中:
'\n'.join(' '.join(x) for x in zip(a, b))
zip返回元组列表。当a或b中的较短者停止时,zip停止。
在python 2.x中:
如果itertools.izip会在其中一个列表用完元素时停止但是itertools.izip_longest将停止直到列表中没有更多元素
import itertools
'\n'.join(' '.join(x) for x in itertools.izip(a, b))
'\n'.join(' '.join(x) for x in itertools.izip_longest(a, b))