Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从映射中一次检索2个值-在Python3.x中_Python_Python 3.x_Coordinates_Subscript_Alternating - Fatal编程技术网

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

如何从映射中一次检索2个值-在Python3.x中,python,python-3.x,coordinates,subscript,alternating,Python,Python 3.x,Coordinates,Subscript,Alternating,这是一个Python2.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 我正在将其转换为Python3.x,映射对象不再是可下标的。这就是我目前解决问题的方法: def IntsTo

这是一个Python2.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
我正在将其转换为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)
,它适用于任何iterable:

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)]

但是我会保留它,以使函数更通用(有一天你可能想传递一个
列表而不是
映射图
)。

是的,你需要保留iter!最后两个表达式将生成x和y值相同的点。不是这个主意@多贝达尼:不,他们没有,前提是
ints
实际上是一个生成器(例如地图),而不是一个列表