Python 如何迭代两个不同大小的列表以获得新列表?

Python 如何迭代两个不同大小的列表以获得新列表?,python,Python,现在我想建立一个包含100*502-D点的列表。我尝试了以下方法: [(x+0.5, y+0.5) for x, y in zip(range(100), range(50))] 这只给我50*50分。我找到了解释这一点的原因 对于zip,新列表的长度与最短列表的长度相同 要正确获得我想要的100*50积分,最具Pythonic的方法是什么?好吧,我想你想要的是itertools.product而不是zip itertools.product计算两个列表的笛卡尔积,得到100*50分 你这样做

现在我想建立一个包含
100*50
2-D点的列表。我尝试了以下方法:

[(x+0.5, y+0.5) for x, y in zip(range(100), range(50))]
这只给我50*50分。我找到了解释这一点的原因

对于zip,新列表的长度与最短列表的长度相同


要正确获得我想要的
100*50
积分,最具Pythonic的方法是什么?

好吧,我想你想要的是
itertools.product
而不是
zip

itertools.product
计算两个列表的笛卡尔积,得到100*50分

你这样做的方式是

import itertools
[(x+0.5,y+0.5) for x,y in itertools.product(range(100),range(50))]

您也可以这样做,嵌套for循环,但一般来说,我认为itertools.product更具可扩展性和pythonic(flat优于嵌套)

您需要一个用于
x
的循环和一个用于
y
的循环:

>>> points = [(x+0.5, y+0.5) for x in xrange(100) for y in xrange(50)]
>>> len(points)
5000
>>> 100 * 50
5000
两个循环

[(x+0.5, y+0.5) for x in range(100) for y in range(50))]

这是一种添加量较少的方法(仅为150而不是5000)


也可以使用numpy.meshgrid:

import numpy as np
x, y = np.meshgrid(np.arange(0,100,1),np.arange(0,50,1))

使用itertools.izip_longest()作为将来的参考,您要寻找的是笛卡尔积,而不是锁步迭代。
import numpy as np
x, y = np.meshgrid(np.arange(0,100,1),np.arange(0,50,1))