在Python中使用循环修改列表:我这样做的方法是否错误?
我刚刚开始学习Python,所以我只想了解一些事情。 我想做一个函数,它重复地将列表“lst”的当前最后三个元素的总和追加到“lst”,x个“次数”。 据我所知,您不应该在迭代列表时更改列表,所以我的第二个解决方案是错误的,对吗?即使它产生与第一个函数相同的结果在Python中使用循环修改列表:我这样做的方法是否错误?,python,list,loops,Python,List,Loops,我刚刚开始学习Python,所以我只想了解一些事情。 我想做一个函数,它重复地将列表“lst”的当前最后三个元素的总和追加到“lst”,x个“次数”。 据我所知,您不应该在迭代列表时更改列表,所以我的第二个解决方案是错误的,对吗?即使它产生与第一个函数相同的结果 def appendsums(lst, times): count = 0 for i in range(times): if count <= times: sums =
def appendsums(lst, times):
count = 0
for i in range(times):
if count <= times:
sums = sum(lst[-3:])
lst.append(sums)
count += 1
return lst
def追加和(lst,次):
计数=0
对于范围内的i(次):
如果count通常是不安全的,因为容器上的迭代器没有被告知发生了更改。通常需要创建一个临时列表,然后在末尾修改目标列表
另外,作为旁注,我认为您可能希望计数小于次(并且不等于次)
在其当前形式中,当我将时间设置为5时,它会添加六个条目
>>> def appendsums(lst, times):
... count = 0
... while count <= times:
... sums = sum(lst[-3:])
... lst.append(sums)
... count += 1
... return lst
...
>>> appendsums([1,2,3], 5)
[1, 2, 3, 6, 11, 20, 37, 68, 125]
>>def appendsums(lst,times):
... 计数=0
... 而计数>>追加总和([1,2,3],5)
[1, 2, 3, 6, 11, 20, 37, 68, 125]
这通常是不安全的,因为容器上的迭代器没有被告知发生了更改。通常需要创建一个临时列表,然后在末尾修改目标列表
另外,作为旁注,我认为您可能希望计数小于次(并且不等于次)
在其当前形式中,当我将时间设置为5时,它会添加六个条目
>>> def appendsums(lst, times):
... count = 0
... while count <= times:
... sums = sum(lst[-3:])
... lst.append(sums)
... count += 1
... return lst
...
>>> appendsums([1,2,3], 5)
[1, 2, 3, 6, 11, 20, 37, 68, 125]
>>def appendsums(lst,times):
... 计数=0
... 而计数>>追加总和([1,2,3],5)
[1, 2, 3, 6, 11, 20, 37, 68, 125]
没错,编辑时不应在列表上迭代。但是,正如其他用户所指出的,上面的示例都不是在列表中迭代的lst
下面是一个迭代示例:
for item in lst:
# Do something
如果在编辑列表时需要对其进行迭代,请复制并迭代该副本:
copy_lst = lst[:]
for item in copy_lst:
# edit lst
我坚持使用以下代码:
def appendsums(lst, times):
for i in range(times):
lst.append(sum(lst[-3:]))
return lst
没错,编辑时不应该迭代列表。但是,正如其他用户所指出的,上面的示例都不是在列表中迭代的lst
下面是一个迭代示例:
for item in lst:
# Do something
如果在编辑列表时需要对其进行迭代,请复制并迭代该副本:
copy_lst = lst[:]
for item in copy_lst:
# edit lst
我坚持使用以下代码:
def appendsums(lst, times):
for i in range(times):
lst.append(sum(lst[-3:]))
return lst
在任何一个版本中,您都没有迭代列表,因此我看不出问题应该是什么。在第一个解决方案中,您不需要count
或任何检查,例如countcount您没有在任何一个版本中迭代列表,所以我不明白问题应该是什么。在第一个解决方案中,您不需要计数或任何检查,例如计数计数,不需要对列表进行切片,因为我们只在求和完成后追加。切片是因为我们只需要最后3个元素,不是因为我们担心在迭代列表时会更改列表。哦,我错过了问题中的那一点。对不起,我正在修理。谢谢。没有必要对列表进行切片,因为我们只在求和完成后追加。切片是因为我们只需要最后3个元素,而不是因为我们担心在迭代列表时更改列表。哦,我错过了问题的那一点。对不起,我正在修理。谢谢