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

2024-10-04 03:24:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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

有谁有更好的主意吗


Tags: 函数inforlenreturndefrange序列
1条回答
网友
1楼 · 发布于 2024-10-04 03:24:26

经典的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)]

但是我会保留它,以使函数更通用(有一天您可能希望传递一个list,而不是一个map

相关问题 更多 >