For循环迭代未使用条件集insin执行

2024-10-03 21:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的python循环,它遍历一个2D列表,其中有1000个子列表。每个子列表将包含3个字符串值。我只想更改第365个子列表之后的子列表。我还有一个非常简单的条件,它将决定是否对元素应用一个操作。我的最低代码如下:

def change_list(arr):
    for i in range(len(arr)):
        if i < 365:
            pass
        else:
            arr[i][1] = str(int(arr[i][1]) * 2)

当在main中应用这个函数时,我只调用这个函数:change_list(parsed_lines)。对于解析的行,我只举一个简单的例子:

parsed_lines = [["afkj","12","234"]] * 1000

我的函数将对所有子列表执行“乘2”操作,这是一个意外的行为。我试过不使用条件,但结果是相同的行为。你知道吗

for i in range(365, len(arr)):
    arr[i][1] = str(int(arr[i][1]) * 2)

然后我尝试了另一种方法来迭代我的arr:

for line in arr:
    if arr.index(line) < 365:
        print("I'm less than 365")
    else:
        line[1] = str(int(line[1]) * 2)

但是这个迭代永远不会执行else下的块。我对此很困惑,希望有人能帮忙。你知道吗

更新:

预期行为应为:

  1. 对于arr[0: 365],子列表将保持不变:[["afkj","12","234"]]
  2. 对于arr[365:],子列表将是:[["afkj","24","234"]]

Tags: 函数in列表forlinerange条件change
1条回答
网友
1楼 · 发布于 2024-10-03 21:25:56

如前所述,您的问题不在程序中,而是在测试集中。parsed_lines = [["afkj","12","234"]] * 1000创建一个包含1000个对同一列表的引用的列表["afkj","12","234"]。当它通过这些引用中的任何一个(比如,高于365)被修改时,它被视为通过这些引用中的任何一个(甚至低于365)被修改。换句话说,parsed_lines[0][0]='foo'使所有子列表中的所有第一个元素'foo'。你知道吗

相关问题 更多 >