使用 for 循环和枚举来操作嵌套列表中的值

问题描述 投票:0回答:1

如果这篇文章中的术语不正确,我深表歉意,我对 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 之前停止。现在程序运行但没有数字改变。

任何帮助将不胜感激。

谢谢。

python-3.x nested-loops nested-lists
1个回答
0
投票

您的方法和当前代码都存在几个问题:

  1. 定义输入的语法无效,将抛出
    IndentationError
    。如果你想要一个嵌套列表,你必须嵌套方括号,例如:
inputs = [
    [1, 2, 3],
    [4, 5, 6]
]
  1. nan
    在Python中不存在,你是说
    numpy.nan
    吗?

  2. range(1, -1)
    可能不会按照您的想法去做。尝试打印出索引等中间值,以了解您的代码的作用。另外,请尝试从尽可能小的输入数据开始,以便更容易理解。

  3. 为您的变量提供描述性名称以减少混淆。特别是,不要使用它们的类型作为它们的名称(如

    List
    )。如果它真的是一个抽象的数字列表,你可以称它为
    numbers
    ,尽管更有意义的东西会更可取。

© www.soinside.com 2019 - 2024. All rights reserved.