首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用python中嵌套的for循环创建列表

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

Stack Overflow用户
提问于 2013-11-28 17:23:36
回答 3查看 5.5K关注 0票数 2

我正在尝试使用python中嵌套的for循环创建一个列表。该列表需要由多个列表组成,每个列表对应于某个参数的值,并包含该参数的方程结果。运行我的代码会产生一个IndexError。这是我代码中导致问题的部分:

代码语言:javascript
代码运行次数:0
运行
复制
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个字符长列表)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-28 17:28:40

Python列表不会自动增长;寻址不存在的索引不起作用。您通常会使用.append()

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
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))

在这里,我使用enumerate()为每个循环添加了一个索引;这让您可以吃蛋糕;从输入序列中访问一个值及其在序列中的位置。

但是,嵌套列表可以最简单地使用嵌套的清单理解集生成。

代码语言:javascript
代码运行次数:0
运行
复制
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()每个循环迭代。名单是就地建立的。

票数 2
EN

Stack Overflow用户

发布于 2013-11-28 17:46:21

代码语言:javascript
代码运行次数: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))]
票数 1
EN

Stack Overflow用户

发布于 2013-11-28 18:24:52

短答案

代码语言:javascript
代码运行次数: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)

参考

代码语言:javascript
代码运行次数:0
运行
复制
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

你可能想通过列表理解来做。

在这一点上都别试。

因为你会犯很多错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20271769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档