在Python中将元组添加到元组列表中
我刚开始学习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]
想了解更多,可以查看列表推导式的相关内容。