Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用循环修改列表:我这样做的方法是否错误?_Python_List_Loops - Fatal编程技术网

在Python中使用循环修改列表:我这样做的方法是否错误?

在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 =

我刚刚开始学习Python,所以我只想了解一些事情。 我想做一个函数,它重复地将列表“lst”的当前最后三个元素的总和追加到“lst”,x个“次数”。 据我所知,您不应该在迭代列表时更改列表,所以我的第二个解决方案是错误的,对吗?即使它产生与第一个函数相同的结果

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
或任何检查,例如
count
count您没有在任何一个版本中迭代列表,所以我不明白问题应该是什么。在第一个解决方案中,您不需要
计数
或任何检查,例如
计数
计数,不需要对列表进行切片,因为我们只在求和完成后追加。切片是因为我们只需要最后3个元素,不是因为我们担心在迭代列表时会更改列表。哦,我错过了问题中的那一点。对不起,我正在修理。谢谢。没有必要对列表进行切片,因为我们只在求和完成后追加。切片是因为我们只需要最后3个元素,而不是因为我们担心在迭代列表时更改列表。哦,我错过了问题的那一点。对不起,我正在修理。谢谢