给定问题的输出说明

时间:2019-04-17 09:00:00

标签: python-3.x

在显示的代码中,val变量的值ar[0]为10。但是在for循环1次迭代之后,val的值发生了变化。为什么会改变?所有迭代都会发生这种情况。

import math
import os
import random
import re
import sys

n = int(input())
ar = list(map(int,input().split()))
#print(len(ar))
while len(ar)!=0:
    val=ar[0]
    #print(val)
    #ar.remove(val)
    #print(ar)
    for val in ar:
        print(val)
        ar.remove(val)
        print(ar)

> 10 [30, 20, 10, 10, 20, 50, 10, 20] 
> 20 [30, 10, 10, 20, 50, 10, 20]  
> 10 [30, 10, 20, 50, 10, 20]
> 50 [30,10, 20, 10, 20]
> 20 [30, 10, 10, 20]
> 30 [10, 10, 20]
> 10 [10, 20]
> 10 [20]
> 20 []

3 个答案:

答案 0 :(得分:0)

您的代码段中发生了一些可能令人困惑的事情。

首先要设置val=ar[0],然后在for循环中使用它:

val=ar[0]
for val in ar:
    print(val)

结果是,在每次for循环迭代中都会重新分配val。

第二个可能令人困惑的地方是for循环中的ar.remove(val)。因为要在迭代时删除,所以可能导致未指定的行为。

要获得所需的输出,最好使用附加的辅助列表来实现代码:

ar = list(map(int,input().split()))
new_ar[:] = ar
while len(ar)!=0:
    for val in ar:
        print(val)
        new_ar.remove(val)
        print(new_ar)

在这个问题中,您想要达到的目标或期望的输出还不是很清楚,但是希望您可以将这两部分结合起来。

答案 1 :(得分:0)

您可以打印ar的类型:

print(typee(ar)) # --> output : <class 'list'>

因此,代码ar.remove(val)将元素ar[0]删除为

val = ar[0]

这给出了为什么每次迭代都会更改val的值的答案。

答案 2 :(得分:0)

在编写for函数时,需要确保这些条件不变。 让我们看看会发生什么: 您输入的是30, 20, 10, 10, 20, 50, 10, 20

val=ar[0]是30 然后进入循环

ar.remove(val)删除第一个val元素,使其成为

20, 10, 10, 20, 50, 10, 20

但是val元素将是新的ar[1],即10

这是阵列的概述

  

30 ,20、10、10、20、50、10、20

     

20, 10 ,10、20、50、10、20

     

20,10, 20 ,50,10,20

     

10,20,50, 10 ,20

因此它存在于for循环中