我有以下代码:
# 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]]
答案 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_x
和transform_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
,如较长的示例代码中所示。