给出一个5 x 5的网格和一个对象列表(可以是任何东西,例如整数)
如何填充网格的顺序是: A1,A2,A3,A4,A5,B5,B4,B3,B2,B1,C1,C2等,等等
所以这有点像蛇在网格上。
在python代码中的网格是使用以下代码创建的列表列表。
我尝试了多种使用标志来反转列表方向的方法,但是它们都很混乱。
room = []
columns = 5
rows = 5
for x in range(columns):
room.append(["0"] * rows)
答案 0 :(得分:0)
您可以使用模数运算符来振荡范围的方向
room = []
columns = 5
rows = 5
for x in range(columns):
room.append([])
if (x % 2 == 0):
start = 1
stop = rows + 1
step = 1
else:
start = rows
stop = 0
step = -1
for y in range(start,stop,step):
room[x].append(y)
print(room)
#result: [[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [1, 2, 3, 4, 5]]
答案 1 :(得分:0)
您可以通过循环按列大小分块的数据集的行并使用模数运算符(如@AndrewYochum的答案中所述)来交替反转每个子列表来创建网格。请注意,如果您需要接受输入列表的项目少于网格大小(可能不包括超出网格范围的输入列表项目),则可能需要添加一些检查和填充符。
SELECT
LEFT(CONVERT(VARCHAR, DateCol1, 120), 10)
FROM
ourDatabase.dbo.ourTable
或作为列表理解:
data = list(range(25))
cols = 5
rows = 5
grid = []
for i, x in enumerate(range(0, rows * cols, cols)):
grid.append(data[x:x+cols][::-1] if i % 2 else data[x:x+cols])
print(grid)
# [[0, 1, 2, 3, 4], [9, 8, 7, 6, 5], [10, 11, 12, 13, 14], [19, 18, 17, 16, 15], [20, 21, 22, 23, 24]]
答案 2 :(得分:0)
这是工作代码
room = []
columns = 3
rows = 3
items = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for x in range(columns):
room.append(["0"] * rows)
for x in range(columns):
if (x % 2 == 0):
for y in range(rows):
room[x][y] = items.pop(0)
else:
start = (rows - 1)
stop = -1
step = -1
for y in range(start, stop, step):
room[x][y] = items.pop(0)
print(room)
#result: [[1, 2, 3], [6, 5, 4], [7, 8, 9]]