首页 > 解决方案 > 列表元素未更新?

问题描述

在这个程序中,我试图做到这一点,如果元素的索引是非素数,则给定从索引 0 到 n + 1 的字符“P”的元素列表(n 是用户输入的值)编号,则元素会将自身从“P”更新为“NP”。在我的代码中,我创建了一个 for 循环,该循环将通过列表元素递增,并且对于每个元素,它将将该元素的索引放入另一个 for 循环,在该循环中,它将所有索引为原始索引倍数的元素转换为 ' NP'。

然而,由于某种原因,当我输入值 10 以创建一个包含 11 个元素的列表(索引范围为 0-10)时,它会返回此列表:['NP', 'NP', 'P', 'NP', ' NP', 'NP', 'NP', 'NP', 'NP', 'NP', 'NP'] 我想知道为什么它将索引 2 处的元素之后的所有元素都转换为 'NP'?

listOfNum = []
count = 2
divCheck = 1

while True:
    userNum = int(input("Enter number of elements greater than or equal to 10: "))
    if userNum < 10:
        print("Invalid input, input must be higher than or equal to 10")
    elif userNum >= 10:
        listOfNum = ['P'] * (userNum + 1)
        listOfNum[0] = "NP"
        listOfNum[1] = "NP"
        for i in range(2, userNum+1):
            if listOfNum[i] == "NP":
                continue
            elif listOfNum[i] == "P":
                for z in range(i+1, userNum+1):
                    if ((listOfNum.index(listOfNum[z]) % listOfNum.index(listOfNum[i])) != 0):
                        continue 
                    elif (listOfNum.index(listOfNum[z]) % listOfNum.index(listOfNum[i])) == 0:
                        listOfNum[z] = "NP"
            print(listOfNum)
            break  ```

标签: python

解决方案


listOfNum.index(listOfNum[z])是一个很大的不,因为它从列表的开头线性查找元素的值,所以它返回第一个元素。

替换为您在循环z中定义的索引。range

if ((listOfNum.index(listOfNum[z]) % listOfNum.index(listOfNum[i])) != 0):

变成

if z % i:

不确定是否还有其他问题,但它应该会更好。

z这是一个更简单的循环重写:

for z in range(i+1, userNum+1):
     if z % i == 0:
        listOfNum[z] = "NP"

推荐阅读