如何在Python中将浮点列表转换为成对的int列表?

时间:2019-04-02 15:22:58

标签: python python-3.x

任务是将[1.5, 1.2, 2.4, 2.6, 3.0, 3.3]转换为[(2, 1), (2, 3), (3, 3)]

目前,我使用蛮力方式:

result = []
for i in range(0, len(nums), 2):
   x = int(round(nums[i]))
   y = int(round(nums[i + 1]))
   result.append((x,y))
return result

是否有更简洁的内置解决方案(例如,使用itertoools)?

4 个答案:

答案 0 :(得分:2)

您可以zip一起使用它们(使用交替模式[::2][1::2]),然后随身携带:

L = [1.5, 1.2, 2.4, 2.6, 3.0, 3.3]
L = [(round(x), round(y)) for x, y in zip(L[::2], L[1::2])]
# [(2, 1), (2, 3), (3, 3)]

答案 1 :(得分:2)

您可以将iter()zip()结合使用来创建对。然后可以舍入值。

我将使用@Alex答案中的代码来显示差异

L = [1.5, 1.2, 2.4, 2.6, 3.0, 3.3]
it = iter(L)
L = [(round(x), round(y)) for x, y in zip(it, it)]

答案 2 :(得分:0)

假定给定列表始终由偶数个元素组成:

l = [1.5, 1.2, 2.4, 2.6, 3.0, 3.3]

def f(s):
    for i in range(int(len(s)/2)):
        yield (round(s[2*i]), round(s[2*i+1]))

print(list(f(l)))

#[(2, 1), (2, 3), (3, 3)]

答案 3 :(得分:0)

我有一个使用zip的解决方案。您也可以尝试。

l = [1.1,2.2,3.3,4.4,5.5,6.6]
def fun(l):
    x = list(zip(*[l[i::2] for i in range(2)]))
    print(x)

ll = round[(x) for x in l]
fun(ll)

#[(1, 2), (3, 4), (6, 7)]