Python 列表(矩阵)理解列表

Python 列表(矩阵)理解列表,python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,我试图使我的代码更紧凑。是否可以用列表理解的方式用更少的行来编写下面的代码 time_horizon = 4*7 number_shifts = 3 qqq = [[0 for i in range(time_horizon)] for j in range(number_shifts)] count = 0 for i in range(time_horizon): for j in range(number_shifts): qqq[j][i] = count

我试图使我的代码更紧凑。是否可以用列表理解的方式用更少的行来编写下面的代码

time_horizon = 4*7
number_shifts = 3

qqq = [[0 for i in range(time_horizon)] for j in range(number_shifts)]
count = 0
for i in range(time_horizon):
    for j in range(number_shifts):
        qqq[j][i] = count
        count = count+1
print(qqq)
结果是

[[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81], [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70, 73, 76, 79, 82], [2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, 56, 59, 62, 65, 68, 71, 74, 77, 80, 83]]
这是一条单行线:

[[j+i for i in range(time_horizon*number_shifts) if i%number_shifts==0] for j in range(number_shifts)]
这使得:

[[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81], [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70, 73, 76, 79, 82], [2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, 56, 59, 62, 65, 68, 71, 74, 77, 80, 83]]
根据您的代码(带值):

或者更简单一点:

[[j+i for i in range(0,time_horizon*number_shifts,number_shifts) ] for j in range(number_shifts)]
或:

这是一条单行线:

[[j+i for i in range(time_horizon*number_shifts) if i%number_shifts==0] for j in range(number_shifts)]
这使得:

[[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81], [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70, 73, 76, 79, 82], [2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, 56, 59, 62, 65, 68, 71, 74, 77, 80, 83]]
根据您的代码(带值):

或者更简单一点:

[[j+i for i in range(0,time_horizon*number_shifts,number_shifts) ] for j in range(number_shifts)]
或:

一种简单的单面衬里

time_horizon, number_shifts = 28, 3
qqq = [[n+t*number_shifts for t in range(time_horizon)] for n in range(number_shifts)]
print(qqq)
一种简单的单面衬里

time_horizon, number_shifts = 28, 3
qqq = [[n+t*number_shifts for t in range(time_horizon)] for n in range(number_shifts)]
print(qqq)

与其测试
i%3==0
,不如在范围内使用步长值3更简单。您也可以设置起始值,而不是手动添加
j
。@user2357112supportsMonica添加了步长方法,而不是测试
i%3==0
,只在范围内使用步长值3会更简单。您也可以设置起始值,而不是手动添加
j
。@user2357112supportsMonica添加了步长方法