“蛇”填充网格(列表列表)

时间:2019-04-24 18:46:57

标签: python

给出一个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)

3 个答案:

答案 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]]