【问题标题】:why does my for loop not edit the global list I and looping through and editing? [duplicate]为什么我的 for 循环不编辑全局列表 I 并循环和编辑? [复制]
【发布时间】:2019-12-23 02:30:34
【问题描述】:

那里可能有一个匹配的问题。我有一个全局定义的列表,我正在尝试遍历列表并使用特定的 if 语句编辑某些元素。我的问题是,当我在循环之前打印列表和之后打印列表时,它们仍然是相同的。

我考虑过使用 enumerate 手动编辑 list["enumerated number"] 使用连接到元素的数字,但这似乎很笨拙。

print(list)
for el in list:
    print(el)
    if el < 1:
        el = 0
    elif el > 1:
        el = 2
print(list)

我希望得到一个根据 if 语句编辑的顶级列表的输出。

【问题讨论】:

  • 您没有对列表进行任何更改。您所做的只是更改然后重用您的循环索引。
  • 在这里为您的问题找到不同的最佳解决方案。 stackoverflow.com/questions/9470056/…

标签: python for-loop if-statement


【解决方案1】:

试试这个:

for i in range(len(list)):
    if list[i] < 1:
        list[i] = 0
    elif list[i] > 1:
        list[i] = 2

我认为您的代码无法正常工作的原因是因为您引用的是列表中的对象,而不是对象的位置。

【讨论】:

  • 我认为您的代码无法正常工作的原因是因为您引用的是列表中的对象,而不是对象的位置。
  • 那条评论你的答案。你应该把它放在那里,而不是作为评论。一个好的答案总是能解释你给出的代码,以及为什么它应该在原始代码没有工作的情况下工作。
  • @ScottMermelstein 嗨!我忘了添加它,并决定将其添加为评论。我的错!
  • edit。评论可以随意删除;不要丢失好的内容!
  • 嗨。你能解释一下你的意思。对于嵌套数组,你只需要使用另一层索引 (list[i][j])
【解决方案2】:

正如 Derek Langley 所建议的,您可以通过索引列表来实现。而不是range(len(list)),使用enumerate(list)是个好习惯

print(list)
for index, value in enumerate(list):
    print(value)
    if value < 1:
        list[index] = 0
    elif value > 1:
        list[index] = 2
print(list)

编辑:我会将此添加为评论,但我还没有足够的积分!

【讨论】:

    【解决方案3】:

    这不起作用的原因是 Python 变量只是名称。每次通过循环,el 最初被设置为下一个列表索引处的名称。例如,如果下一个值为 3,则计算机现在将在 el 出现时将其替换为 3。

    但是当你有一个像el = 2 这样的语句时,你所做的只是告诉计算机从现在开始,el 只是数字 2 的另一个名称。你实际上并没有编辑底层的列表元素。为此,您需要执行以下操作:

    for i in range(len(list)):
        print(list[i])
        if list[i] < 1:
            list[i] = 0
        elif list[i] > 1:
            list[i] = 2
    

    这可行的原因是,您实际上是在更改列表元素本身,而不是为每个列表元素命名,然后将该名称赋予其他东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-23
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      相关资源
      最近更新 更多