在python中使用嵌套for循环创建列表

2024-05-06 19:03:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用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_1y_1大小不同(y_1是150长的深度点列表,A_1是参数A的不同值的4个字符长的列表)。在


Tags: 代码in列表for参数lenrange序列
3条回答
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))]

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))

请注意,您不再需要创建索引;您可以直接在A_1y_1上循环并使用公式中的值。在

另一种方法是使用占位符值创建一个空结构;例如None

^{pr2}$

在这里,我使用^{}向每个循环添加一个索引;这可以让您的蛋糕吃掉它;从输入序列及其在序列中的位置访问一个值。在

但是,您的嵌套列表最简单的方法是使用list comprehensions的嵌套集生成:

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上循环并为每个元素生成新的值(您的公式)。在

注意,现在我们不再需要生成索引使用list.append()每个循环迭代。列表已经建立好了。在

简短回答

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)

参考

^{pr2}$

您可以通过列表理解来完成。
在这一点上都不要尝试。
因为你会犯很多错误。在

相关问题 更多 >