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

12 浏览
0 Comments

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

现在我希望构建一个包含100*50个二维点的列表。我尝试了以下方法:

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

这只给我50*50个点。我在这个答案中找到了原因:

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

最Pythonic的方法是如何正确地获得我所需的100*50个点?

0
0 Comments

问题的出现原因是需要遍历两个不同大小的列表并生成一个新的列表。解决方法是使用itertools库中的product函数和map函数来实现。

具体的解决方法如下:

1. 首先导入itertools库中的product函数:from itertools import product。

2. 使用map函数对两个列表进行操作,将每个元素都加上0.5:map(.5.__add__, range(100))。

3. 使用product函数将两个列表进行组合,生成新的列表:list(product(map(.5.__add__, range(100)), map(.5.__add__, range(50))))。

通过以上步骤,即可得到一个新的列表。

示例输出如下:

[(0.5, 0.5), (0.5, 1.5), (0.5, 2.5), (0.5, 3.5), (0.5, 4.5), (0.5, 5.5), (0.5, 6.5), (0.5, 7.5), (0.5, 8.5), (0.5, 9.5), ...]

以上就是解决遍历两个不同大小的列表并生成一个新的列表的方法。通过使用itertools库中的product函数和map函数,可以简洁地实现该功能,避免了大量的代码添加。

0
0 Comments

很明显,这个问题的出现是因为在迭代两个不同大小的列表时,使用了错误的函数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的设计原则(扁平胜于嵌套)。

0
0 Comments

问题的出现原因是需要遍历两个不同大小的列表,并获取一个新的列表。解决方法是使用两个循环,一个循环遍历列表x,另一个循环遍历列表y。

以下是解决该问题的代码示例:

points = [(x+0.5, y+0.5) for x in xrange(100) for y in xrange(50)]

上述代码中,首先定义了一个名为points的列表。通过嵌套的两个循环,列表x的元素会在列表y的每个元素上迭代。在每次迭代中,会将x和y的当前元素分别加上0.5,并将其作为一个元组添加到points列表中。

最后,通过使用len函数检查points列表的长度,我们可以验证新列表的长度是否与期望的结果相同。在这个例子中,points列表的长度为5000,与列表x和列表y的元素个数相等(100 * 50 = 5000)。

通过以上的解决方法,我们可以遍历两个不同大小的列表,并获取一个新的列表。

0