如果这篇文章中的术语不正确,我深表歉意,我对 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 到 5 中的第一个和最后一个值。本质上只是在 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”循环,它将使用枚举在我感兴趣的单个嵌套列表范围内迭代值,即 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)
Enumerate 函数有一个启动函数,如果我将“if”语句设置为大于 1,它将跳过 nan 值并从 2 开始。我不确定如何让程序在 5 之前停止。现在程序运行但没有数字改变。
任何帮助将不胜感激。
谢谢。
您的方法和当前代码都存在几个问题:
IndentationError
。如果你想要一个嵌套列表,你必须嵌套方括号,例如:inputs = [
[1, 2, 3],
[4, 5, 6]
]
nan
在Python中不存在,你是说numpy.nan
吗?
range(1, -1)
可能不会按照您的想法去做。尝试打印出索引等中间值,以了解您的代码的作用。另外,请尝试从尽可能小的输入数据开始,以便更容易理解。
为您的变量提供描述性名称以减少混淆。特别是,不要使用它们的类型作为它们的名称(如
List
)。如果它真的是一个抽象的数字列表,你可以称它为numbers
,尽管更有意义的东西会更可取。