首页 > 解决方案 > 如何为我的 3D 列表中的每个元素 = 1 分配一个随机数?

问题描述

我创建了一个名为 x 的 3D 列表,并创建了另一个列表,其大小与我之前的列表 y 相同,其中包含零个元素。我需要遍历我的 x 列表并检查每个元素是否等于 1,在我的 y 列表中给它一个随机数。我的尝试如下,但出现错误:

import random
import numpy as np

x =   [[[0, 1, 0, 0, 0, 0],
        [0, 1, 0, 0, 0, 0],
        [0, 1, 0, 0, 0, 0],
        [0, 1, 0, 0, 0, 0],
        [0, 0, 0, 0, 1, 0]],
        [[0, 1, 0, 0, 0, 0],
        [0, 1, 0, 0, 0, 0],
        [0, 1, 0, 0, 0, 0],
        [0, 1, 0, 0, 0, 0],
        [0, 0, 0, 0, 1, 0]]]

y = [[[0 for row in range(len(x[0][0]))] for col in range(len(x[0]))] for a in range(len(x))]
for i in range(len(x[0][0])):    
    for j in range(len(x[0])):
        for k in range(len(x)):

            if x[i][j][k] == 1:
                y[i][j][k] = random.randint(1,100)

            else:
                y[i][j][k] = 0

print(y)

错误:

if grid[i][j][k] == 1:

IndexError: list index out of range

请问我可以得到任何帮助吗?

标签: list3dpython-3.7

解决方案


您正在以错误的方式循环。

您总是希望首先循环最外面的列表,然后再向内处理相应外部列表中的每个元素。

试试这样:

for i in range(len(x)):    
    for j in range(len(x[0])):
        for k in range(len(x[0][0])):

            if x[i][j][k] == 1:
                y[i][j][k] = random.randint(1,100)

            else:
                y[i][j][k] = 0

推荐阅读