我有这个密码:
#!/usr/bin/python3
def contract(e, i, c, n):
l = len(e)
grid = [[0 for i in range(i + 1)] for x in range(l)]
for num1, row1 in enumerate(grid):
row1[0] = e[num1] #add exponents
for num2, row2 in enumerate(grid):
if 0 <= num2 < n[0]:
grid[num2][1] = c[num2]
if n[0] <= num2 < n[0] + n[1]:
grid[num2][2] = c[num2]
if n[0] + n[1] <= num2 < n[0] + n[1] + n[2]:
grid[num2][3] = c[num2]
for g in grid:
print(g)
e = [0, 1, 2, 3]
i = 3
c = [4, 5, 6, 7]
n = [1, 2, 1]
contract(e, i, c, n)
这段代码的想法是,我有一个二维网格
len(e) x (i + 1)
e
。其余列应包含系数
c
以这样的方式
n
确定系数在栅格中的位置。例如,自从
n[0] = 1
,第1列,网格中的第0行包含数字4。下一个元素
N
是2,所以网格中的下一列(第2列)应该包含2个数字,这意味着我之前使用的行下面的行中有数字5和6(这意味着已经使用了第1行和第2行,因为已经使用了第0行)。
n[2] = 1
所以
grid[3][3] = 7
等
我用重复的if语句实现了这一点,代码运行良好,输出结果如下:
[0, 4, 0, 0]
[1, 0, 5, 0]
[2, 0, 6, 0]
[3, 0, 0, 7]
然而,我想制作一个通用代码,可以对任意数量的系数和指数执行此操作。如何将这些重复的if语句转换为单个循环?