我正在尝试使用python中的嵌套for循环创建一个列表。该列表需要由多个列表组成,每个列表对应于某个参数的值并包含该参数的等式的结果。运行我的代码会生成IndexError
。这是导致问题的代码的一部分:
T_1 = [[]]
for j in range(len(A_1)):
for i in range(len(y_1)):
T_1[j][i] = T0_1 + ((q0_1 / k_1) * y_1[i]) - ((A_1[j] / (2 * k_1)) * y_1[i]**2)
序列A_1
和y_1
的大小不同(y_1
是150长的深度点列表,A_1
是一个4个字符长的不同值列表参数A
)。
答案 0 :(得分:1)
Python列表不会自动增长;解决不存在的索引不起作用。您通常会使用.append()
:
T_1 = []
for a in A_1:
nested = []
T_1.append(nested)
for y in y_1:
nested.append(T0_1 + ((q0_1 / k_1) * y) - (a / (2 * k_1)) * y**2))
请注意,您不再需要创建索引;您可以直接在<{1}}和A_1
上循环并使用公式中的值。
另一种方法是创建一个带占位符值的空结构;比如y_1
:
None
在这里,我使用enumerate()
为每个循环添加索引;这可以让你的蛋糕和吃掉它;从输入序列及其在序列中的位置访问值。
但是,您的嵌套列表最简单的方法是使用嵌套的list comprehensions生成:
T_1 = [[None] * len(y_1) for _ in range(len(A_1))]
for i, a in enumerate(A_1):
for j, y in enumerate(y_1):
T_1[i][j] = T0_1 + ((q0_1 / k_1) * y) - (a / (2 * k_1)) * y**2))
这里T_1 = [[T0_1 + ((q0_1 / k_1) * y) - ((a / (2 * k_1)) * y**2) for i in y_1] for a in A_1]
在循环的每次迭代中执行左侧的表达式。 [expression for variable in iterable]
上的外部循环为循环中的每个A_1
生成一个新列表。新列表本身就是一个列表解析,循环遍历a
并为每个元素生成新值(您的公式)。
请注意,现在我们不再需要为每个循环迭代生成索引或使用y_1
。这些清单是就地建立的。
答案 1 :(得分:0)
T_1 = [[T0_1 + ((q0_1 / k_1) * y_1[i]) - ((A_1[j] / (2 * k_1)) * y_1[i]**2) for j in range(len(A_1))] for i in range(len(y_1))]
答案 2 :(得分:0)
简短回答
T_1 = [] # outer list, all rows
for j in range(len(A_1)):
T_1.append( [] ) # new inner list, a row
for i in range(len(y_1)):
# last row is T_1[-1] and you append to it
your_value = T0_1 + ((q0_1 / k_1) * y_1[i]) - ((A_1[j] / (2 * k_1)) * y_1[i]**2)
T_1[-1].append(your_value)
<强>参考强>
L = [ [1, 2, 3],
[4, 5, 6],
[7, 8, 9] ]
L[0] -> [1, 2, 3]
L[1] -> [4, 5, 6]
L[2] -> [7, 8, 9]
L[-1] -> [7, 8, 9]
L[0][0] -> 1
L[1][0] -> 4
L[-1][-1] -> 9
您可能希望通过列表理解来实现 在这一点上甚至不要尝试 因为你会犯很多错误。