如何在python中逐对修改列表中的值?

时间:2019-04-03 05:28:49

标签: python python-3.x

我有以下代码:

# defines a square with 4 vertices: (1, 1), (1, 5), (5, 5), (5, 1)
coords = [1, 1, 1, 5, 5, 5, 5, 1]
new_coords = []
for i in range(0, len(coords), 2):
   x = transform_x(coords[i])
   y = transform_y[coords[i + 1])
   new_coords.append(x)
   new_coords.append(y)

我可以使用单行列表init重写它吗(如果没有,最简洁的方法是什么)?例如:

new_coords = [... for x, y in nums[::2], nums[1::2]]

4 个答案:

答案 0 :(得分:3)

您可以在嵌套列表理解中压缩x和y的切片:

 @Html.DropDownListFor(model => model.acc_no, new SelectList(Model.acc, "acc_no", "acc_des"), "<---Select--->", new { @class = "form-control", style = "width: 100%;" })

答案 1 :(得分:0)

尝试一下:

coords = [1, 1, 1, 5, 5, 5, 5, 1]
new_coords = [(coord) for coord in zip(coords[::2], coords[1::2])]
print(new_coords)

输出:

[(1, 1), (1, 5), (5, 5), (5, 1)]

修改

您还可以内联调用transform_xtransform_y函数:

[(transform_x(x), transform_y(y)) for x, y in zip(nums[::2], nums[1::2])]

答案 2 :(得分:0)

怎么样

new_coords = [transform_x(coords[i]) if i % 2 == 0 else transform_y(coords[i]) for i in range(len(coords))]

答案 3 :(得分:0)

由于您只是交替:

new_coords = [transform_y(c) if n % 2 else transform_x(c) for n, c in enumerate(coords)]

这是假设您希望new_coords是一个列表,例如coords,如较长的示例代码中所示。