这是一个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
(。