如何将两个列表配对?

10

我是Python的初学者,如果这个问题很基础的话请见谅。

我有两个数据列表,分别是从以下来源获得的:

with filein as f:
        reader=csv.reader(f)
        xs, ys = zip(*reader)
我希望创建一个循环,它会取出“xs”中的第一项和“ys”中的第一项并将它们打印出来。然后,我想循环回去,并重复处理两个列表中的第二项,以此类推。
我曾经考虑过类似以下的代码:
```python for x in xs: for y in ys: print(x, y) ```
但是这会把“xs”的每个元素都与“ys”的每个元素配对,而不是按照我的要求逐个匹配它们。
for x in xs and y in ys:
for x in xs:
    for y in ys:

但是这两种方法似乎都没有产生预期的结果。

3个回答

15
使用zip函数,结合元组解包:
for x, y in zip(xs, ys):
    print x, y

根据您的情况,取决于您需要xsys用于什么,您可以直接遍历csv.reader

with filein as f:
    reader=csv.reader(f)
    for x, y in reader:
        print x, y

zip(xs, ys)这一行代码实际上是在翻转你的xs, ys = zip(*reader)这一行代码。


8

使用 zip 函数:

>>> L=[1,2,3]
>>> M=[4,5,6]
>>> for a,b in zip(L,M):
...   print(a,b)
...
1 4
2 5
3 6

1

对于一行代码,您可以使用map()lambda()的组合。如果不熟悉这些概念,请点击此处查看。

但请注意,您必须使用Python 3.x,以便打印是一个函数并且可以在lambda表达式内使用。

>>> from __future__ import print_function
>>> l1 = [2,3,4,5]
>>> l2 = [6,7,3,8]
>>> list(map(lambda X: print(X[0],X[1]), list(zip(l1,l2))))

输出

2 6
3 7
4 3
5 8

不确定为什么这个被投票否决了,如果是因为print语句让他们感到困惑,那么可以使用list(map(lambda x: x, list(zip(l1,l2))))。 - Hutch
在我看来,OP似乎是在询问所有可能的组合,而不是由yield生成的对齐对。 - M Ciel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接