具有从列表指定的不等行/列长度的2D列表

时间:2017-11-19 02:33:16

标签: python-3.x list

num_row = 3
num_col = [2, 4, 8]

# columns, row
list_2d = [[0 for i in range(num_row)] for j in num_col]
#list_2d = [[0 for i in range(num_row)] for j in num_col[:]] # SyntaxError: invalid syntax
#list_2d = [[0 for i in range(num_row)] for num_col[:]] #SyntaxError: invalid syntax
#list_2d = [[0 for i in range(num_row)] for j in num_col[j]] #IndexError: list index out of range


print('\nlist_2d:')
for i in list_2d:
    print(i)

print('\nnum_col:')
for j in num_col[:]:
    print(j)

我的目标是声明/初始化列表列表,其中行元素的数量由数组提供(即,数组的第一个元素给出第一行中的列数,数组的第二个元素给出第二行中的列数等。对于我的生活,我无法弄清楚如何实现这一目标。

我得到了什么:

list_2d:
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]


num_col:
2
4
8

我想要的是什么:

[0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]

2 个答案:

答案 0 :(得分:0)

[[0 for i in range(j)] for j in num_col]

num_row将始终为3,您希望使用j代替

答案 1 :(得分:0)

另一种方法是使用*。这是一个例子

>>> [0]*10
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

应用相同的,你也可以这样做:

num_col = [2,4,8]
result = [[0]*j for j in num_col]