Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中迭代两个或多个列表项的元组?_Python_Loops - Fatal编程技术网

如何在Python中迭代两个或多个列表项的元组?

如何在Python中迭代两个或多个列表项的元组?,python,loops,Python,Loops,具体来说,我有两个字符串列表,我想将它们组合成一个字符串,其中每一行是列表中的下两个字符串,用空格分隔: a = ['foo1', 'foo2', 'foo3'] b = ['bar1', 'bar2', 'bar3'] 我想要一个函数combine_to_lines(),它将返回: """foo1 bar1 foo2 bar2 foo3 bar3""" 我承认我已经解决了这个问题,所以我要发布答案。但也许其他人有一个更好的,或者看到了我的一个缺陷 更新:我过度简化了上面的示例。在我的实际问

具体来说,我有两个字符串列表,我想将它们组合成一个字符串,其中每一行是列表中的下两个字符串,用空格分隔:

a = ['foo1', 'foo2', 'foo3']
b = ['bar1', 'bar2', 'bar3']
我想要一个函数combine_to_lines(),它将返回:

"""foo1 bar1
foo2 bar2
foo3 bar3"""
我承认我已经解决了这个问题,所以我要发布答案。但也许其他人有一个更好的,或者看到了我的一个缺陷

更新:我过度简化了上面的示例。在我的实际问题中,行的格式更加复杂,需要解压从zip()返回的元组。但是对于这个例子,我们非常感谢您提出了最简单的解决方案。

您是在询问函数吗?

返回元组列表,其中第i个元组包含每个参数序列或iterables中的第i个元素


这是一条单行线。如果你这么想的话,可以做
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
简单到:

" ".join([a[x] + " " + b[x] for x in range(len(a))])

无需解压缩和重新打包zip返回的元组:

'\n'.join(' '.join(x) for x in zip(a, b))

我意识到这是一个非常古老的问题,但有趣的是,这可以看作是一个问题

如果您处理的是大型数据集或更多列表,这可能是一个更有效的解决方案。

在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))

对我记不起来了,谷歌搜索花了我一点时间来唤起我的记忆。也许这个问题会在以后的搜索中出现,它确实会出现,并帮助我恢复记忆。所以谢谢你。另一个问题作为问题的答案?:)新行在哪里?还要感谢mhawke提出了主要的解决方案。为什么要在上面写“用Python 3.x”呢?我刚刚确认,在Python2.7.5上,当a或b中较短的一个停止时,zip停止。你说得对!据我所知,这不是Python2.x以前的一个特性,它是从3.x向后移植的,对吗?如果是,我是从哪个版本更新的?
'\n'.join(' '.join(x) for x in zip(a, b))
>>> 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']]
'\n'.join(' '.join(x) for x in zip(a, b))
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))