python-3.x 存储在嵌套列表中的嵌套for循环

u5i3ibmn  于 2023-06-07  发布在  Python
关注(0)|答案(5)|浏览(172)

我有一个嵌套的for循环,我希望结果也存储在一个嵌套的列表中。代码如下:

n_row = 5
n_col = 2
result = []
for r in range(n_row):  
    for c in range(n_col):
        a = r*2
        b = c+1
        d = a-b
        result.append(d)

结果如下:

[-1, -2, 1, 0, 3, 2, 5, 4, 7, 6]

但是,我希望每一行都在一个单独的列表中,结果如下所示:

[[-1, -2], [1, 0], [3, 2], [5, 4], [7, 6]]

有人能帮我解决这个问题吗?

xt0899hw

xt0899hw1#

你只需要在遍历每一行时创建它们:

n_row = 5
n_col = 2
result = []
for r in range(n_row):
    row = []
    result.append(row)
    for c in range(n_col):
        a = r*2
        b = c+1
        d = a-b
        row.append(d)

print(result)

我为它创建了每个rowappend(),但我将行附加到result列表中,而不是每个计算的元素。
按要求输出。

3htmauhk

3htmauhk2#

你可以通过@quamrana将循环重写为answer,但如果你正在寻找一个快速的解决方案,请将以下内容添加到代码中:

result2 = [[result[n_col*k+i] for i in range(n_col)] for k in range(int(len(result)/2))]

它所做的是循环原始的“result”,每次n_col,并构造一个新数组。
为了更容易理解,请注意,对于n_col=2,您可以等效地用途:

result2 = [[result[2*k], result[2*k+1]] for k in range(int(len(result)/2))]

相关资源:List Comprehension

0yg35tkg

0yg35tkg3#

你就快成功了你只需要将行附加到结果中,并将值添加到每一行,而不是将它们添加到顶级列表中:

n_row = 5
n_col = 2
result = []
for r in range(n_row):  
    result.append([])         # <-- add a row
    for c in range(n_col):
        a = r*2
        b = c+1
        d = a-b
        result[-1].append(d)  # <-- add to last row
zdwk9cvp

zdwk9cvp4#

您可以通过以下方式获得结果:

n_row = 5
n_col = 2

k=[(r*2) - (c+1) for r in range(n_row) for c in range(n_col)]
print(k)
[-1, -2, 1, 0, 3, 2, 5, 4, 7, 6]

#Desired output

print([k[i:i+2] for i in range(0,len(k),2)])
[[-1, -2], [1, 0], [3, 2], [5, 4], [7, 6]]
ep6jt1vc

ep6jt1vc5#

n_row = 5
n_col = 2
result = []
for r in range(n_row):  
    row = []
    for c in range(n_col):
        a = r*2
        b = c+1
        d = a-b
        
        row.append(d)
    result.append(row)
        
print(result)

相关问题