提问人:Patstro 提问时间:4/18/2023 最后编辑:Patstro 更新时间:4/19/2023 访问量:118
使用 for 循环和枚举来操作嵌套列表中的值
Using for loops and enumerate to manipulate values within nested lists
问:
如果这篇文章中有不正确的术语,我深表歉意,我对 python 比较陌生,并且正在尝试一些东西。
我正在尝试构建一个程序,该程序将为嵌套列表中的值添加值。
请参阅下面的嵌套列表。
List = [ nan, 4, 5, nan, nan, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 5, nan, nan, nan, nan]
我希望程序从第二个列表开始,在序列中的最终列表之前结束,并跳过列表二到列表五个中的第一个和最后一个值。本质上只是为 2 和 3 所在的地方添加值。
解决方案应如下所示:
List = [ nan, 4, 5, nan, nan, nan, nan],
[ nan, 4, 3, 4, 5, nan, nan],
[ nan, 4, 3, 4, 5, nan, nan],
[ nan, 4, 3, 4, 5, nan, nan],
[ nan, 4, 3, 4, 5, nan, nan],
[ nan, 4, 5, nan, nan, nan, nan]
我试图按如下方式解决这个问题:首先,创建一个程序将在其中迭代的“for”循环范围边界条件,由于列表从 0 开始,到 -1 结束,我可以添加一个范围 (1,-2),然后从列表中排除第一个和最后一个嵌套列表。接下来是一个嵌套的“for”循环,它将使用 enumerate 迭代我感兴趣的单个嵌套列表范围内的值,即 2 和 3 点。
for index in range (1,-1):
for index, item in enumerate(List, start = 1):
if item > 1:
List[index] = round((List[index]+1),3)
print(List)
枚举函数有一个启动函数,如果我将“if”语句设置为大于 1,它将跳过 nan 值并从 2 开始。我不确定如何让程序在 5 之前停止。现在程序正在运行,但没有任何数字改变。
任何帮助将不胜感激。
谢谢。
编辑: 我在下面更新了我的example_list和代码:
example_list = [[ 0, 4, 5, 0, 0, 0, 0],
[ 0, 4, 2, 3, 5, 0, 0],
[ 0, 4, 2, 3, 5, 0, 0],
[ 0, 4, 2, 3, 5, 0, 0],
[ 0, 4, 2, 3, 5, 0, 0],
[ 0, 4, 5, 0, 0, 0, 0]]
x = 1
for i, sub_list in enumerate(example_list[1:-1],start=1):
for j, entry in enumerate(sub_list[1:-1][1:-1], start=2):
if j > 1:
example_list[j] = round((example_list[j]+ x),3)
example_list[i][j] += 1
print(example_list)
我遇到了 TypeError:只能将列表(而不是“int”)连接到列表错误。
答:
您的方法和当前代码都存在几个问题:
- 定义输入的方式的语法无效,将抛出 .如果你想要一个嵌套列表,你必须嵌套方括号,例如:
IndentationError
inputs = [
[1, 2, 3],
[4, 5, 6]
]
nan
在Python中不存在,你的意思是?numpy.nan
range(1, -1)
可能不会按照你的想法去做。尝试打印出索引等中间值,以了解代码的作用。此外,尝试从尽可能小的输入数据开始,使其更易于理解。为变量提供描述性名称以减少混淆。特别是,不要使用它们的类型作为它们的名称(如 )。如果它真的是一个抽象的数字列表,你可以称它为,尽管更有意义的东西会更好。
List
numbers
正如已经指出的那样,您的问题并不完全正确,但这里有一些关于如何解决问题的想法:
如果您有一个嵌套列表,则为
example_list = [[ nan, 4, 5, nan, nan, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 5, nan, nan, nan, nan]
]
然后,您可以使用以下代码片段来执行以下操作
从序列中的第二个列表开始,到最后一个列表之前结束,还可以跳过列表二到列表五个中的第一个和最后一个值
for i, sub_list in enumerate(example_list[1:-1],start=1):
for j, entry in enumerate(sub_list[1:-1],start=1):
# Perform an operation with that value, e.g. add 1
example_list[i][j] += 1
本质上只是为 2 和 3 所在的地方添加值。
关于列表中的 2 和 3,它们仅在第 2 列和第 3 列中,因此您可以使用以下代码片段:
for i, sub_list in enumerate(example_list[1:-1], start=1):
for j, entry in enumerate(sub_list[2:4], start=2):
# Perform an operation with that value, e.g. add 1
example_list[i][j] += 1
我希望这会有所帮助!
评论