我有一个简单的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
下的块。我对此很困惑,希望有人能帮忙。你知道吗
更新:
预期行为应为:
arr[0: 365]
,子列表将保持不变:[["afkj","12","234"]]
arr[365:]
,子列表将是:[["afkj","24","234"]]
如前所述,您的问题不在程序中,而是在测试集中。
parsed_lines = [["afkj","12","234"]] * 1000
创建一个包含1000个对同一列表的引用的列表["afkj","12","234"]
。当它通过这些引用中的任何一个(比如,高于365)被修改时,它被视为通过这些引用中的任何一个(甚至低于365)被修改。换句话说,parsed_lines[0][0]='foo'
使所有子列表中的所有第一个元素'foo'
。你知道吗相关问题 更多 >
编程相关推荐