Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 For循环仅循环3次。为什么?_Python_Python 3.x - Fatal编程技术网

Python For循环仅循环3次。为什么?

Python For循环仅循环3次。为什么?,python,python-3.x,Python,Python 3.x,我写了一个看似简单的循环。列表中有6项,它应该循环6次。但是,它只循环3次为什么? list1 = 'one two three four five six' newlist = list1.split(' ') print (newlist) list2 = ['seven', 'eight', 'nine', 'ten', 'eleven', 'twelve'] for number in list2: nextnumber = list2.pop() print ("Ad

我写了一个看似简单的循环。列表中有6项,它应该循环6次。但是,它只循环3次为什么?

list1 = 'one two three four five six'
newlist = list1.split(' ')
print (newlist)
list2 = ['seven', 'eight', 'nine', 'ten', 'eleven', 'twelve']

for number in list2:
    nextnumber = list2.pop()
    print ("Adding number ", nextnumber)
    newlist.append(nextnumber)

print (newlist)

如注释中所述,您可以在迭代时删除项。使用
while
循环可以更好地模拟此模式:

while list2:
    newlist.append(list2.pop())

它只循环三次,因为您正在积极修改列表2。一个简单的更正就是复制一份

导入副本

list2_c = copy.copy(list2)

for num in list2_c:
.
.
.
.

使用
for
循环将
list2
添加到
newlist
,操作如下:

for number in list2:
    print ("Adding number ", number)
    newlist.append(number)
但短、快、蟒蛇式的方法是

newlist.extend(list2)

请改用以下代码:

for number in list2:
    print ("Adding number ", number)
    newlist.append(number)
print (newlist)

观察:list2.pop()减少了列表元素,也减少了循环次数

快速回答,复制一份list2:

list1 = 'one two three four five six'
newlist = list1.split(' ')
print (newlist)
list2 = ['seven', 'eight', 'nine', 'ten', 'eleven', 'twelve']

for number in list(list2):
    nextnumber = list2.pop()
    print ("Adding number ", nextnumber)
    newlist.append(nextnumber)

print (newlist)

正如前面的答案所说,您正在使用列表2,换句话说,当您使用列表2中的数字时,您正在使用7、8、9,但从未使用它们,而是从列表中删除12、11、10并打印它。您可以这样做:

    for number in list2:
    #Unless you want to append in reverse order(see below for that)
    #comment the next line
        #nextnumber = list2.pop() 
        print ("Adding number ", number) 
        newlist.append(number)#Append the number you just got from list2
    print (newlist)

  out[:]: ['one', 'two', 'three', 'four', 'five', 'six']
  Adding number  seven
  Adding number  eight
  Adding number  nine
  Adding number  ten
  Adding number  eleven
  Adding number  twelve
  ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 
  'ten', 'eleven', 'twelve']

如果您想以相反的顺序追加,请按照@thachnb的建议进行操作。

因为
list2.pop()
会删除列表中的项目-在每个循环中,您会将列表大小减少一个。您可以通过在每次迭代中调用
pop()
来改变
list2
,从而在每次迭代中截断,你想达到什么目的?我只是想把列表2添加到新列表中,然后做
newlist+list2
你想让列表2的顺序颠倒吗?因为这就是你想用
pop()
做的,你也可以使用
list2[:]
list2(list2)
。看看这篇文章