如何一次从地图中检索 2 个值 - 在 Python 3.x 中
How to retrieve 2 values at a time from a map - in Python 3.x
这是一个 Python 2.x 函数,用于处理具有 x、y 坐标的序列;请注意参数 ints 的类型是 map:
def IntsToPoints(ints):
result = []
for i in range(0, len(ints), 2):
result.append(Point(ints[i], ints[i+1]))
return result
我正在将其转换为 Python 3.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
)。
这是一个 Python 2.x 函数,用于处理具有 x、y 坐标的序列;请注意参数 ints 的类型是 map:
def IntsToPoints(ints):
result = []
for i in range(0, len(ints), 2):
result.append(Point(ints[i], ints[i+1]))
return result
我正在将其转换为 Python 3.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
)。