如何在Python3.x中一次从映射中检索两个值



这是一个Python 2.x函数,用于处理具有x,y坐标的序列;请注意,参数int的类型是map:

def IntsToPoints(ints):
result = []
for i in range(0, len(ints), 2):
result.append(Point(ints[i], ints[i+1]))
return result

我正在将其转换为Python3.x,映射对象不再可下标。在此期间,我就是这样解决的:

def IntsToPoints(ints):
result = []
for i, myint in zip(range(len(list(ints))), ints):
if i%2 == 0: x = myint
else: result.append(Point(x, myint))
return result

有谁有更好的主意吗?

经典的python习惯用法是zip(*[iter(...)]*2),它适用于任何可迭代的:

points = [Point(x, y) for x, y in zip(*[iter(ints)] * 2)]

由于您正在传递已经是迭代器的map,因此可以省略iter:

points = [Point(x, y) for x, y in zip(*[ints] * 2)]

或者更简单地说,

points = [Point(x, y) for x, y in zip(ints, ints)]

但我会保留它,以使函数更通用(有一天你可能想传递list而不是map(。

最新更新