任务是将[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
)?
答案 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)]