在Python中将元组添加到元组列表中

18 投票
4 回答
82439 浏览
提问于 2025-04-15 16:51

我刚开始学习Python,不太清楚怎么做这个。

我有一个包含点的元组列表,还有一个表示偏移量的列表。我需要找出所有可能的组合。

这里有一些代码:

offsets = [( 0, 0),( 0,-1),( 0, 1),( 1, 0),(-1, 0)]
points = [( 1, 5),( 3, 3),( 8, 7)]

所以我想要的组合点应该是:

[( 1, 5),( 1, 4),( 1, 6),( 2, 5),( 0, 5),
 ( 3, 3),( 3, 2),( 3, 4),( 4, 3),( 2, 3),
 ( 8, 7),( 8, 6),( 8, 8),( 9, 7),( 7, 7)]

我不能使用NumPy或其他任何库。

4 个回答

8

我个人觉得Alok的回答挺不错的。不过,对于喜欢使用itertools的朋友来说,Python 2.6及以后的版本可以用它来实现类似的功能,代码如下:

import itertools as it
ps = [(x+dx, y+dy) for (x, y), (dx, dy) in it.product(points, offsets)]

不过,在这种情况下,使用itertools的方法并没有比简单的方法更快(其实稍微慢一点,因为它需要对每个偏移量重复拆解每个x, y,而Alok的简单方法只拆解一次)。不过,itertools.product在其他情况下是嵌套循环的一个很好的替代方案,所以了解一下它还是很有必要的!-)

15

其实很简单:

>>> rslt = []
>>> for x, y in points:
...     for dx, dy in offsets:
...         rslt.append( (x+dx, y+dy) )
... 
>>> rslt
[(1, 5), (1, 4), (1, 6), (2, 5), (0, 5), (3, 3), (3, 2), (3, 4), (4, 3), (2, 3), (8, 7), (8, 6), (8, 8), (9, 7), (7, 7)]

就是遍历这些点和偏移量,然后把偏移量加到点上,生成新的元组。

33
result = [(x+dx, y+dy) for x,y in points for dx,dy in offsets]

想了解更多,可以查看列表推导式的相关内容。

撰写回答