python - 列表元素未更新?
问题描述
在这个程序中,我试图做到这一点,如果元素的索引是非素数,则给定从索引 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 ```
解决方案
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"
推荐阅读
- java - MySql 日期一日拆分
- python-3.x - 在python中将数据框行转换为没有列索引的值字符串
- ios - 如何返回异步json请求的结果
- c++ - Converting mysqlx::Value to std::string with special characters
- azure - Azure 表存储错误请求 - 查询语法错误
- apache-kafka - 有人用过 Apache Kafka 的 CNCF CloudEvent 吗?
- eclipse - Eclipse (STS) 开始出现 CreateProcess 错误=1450,系统资源不足,无法完成请求的服务
- hadoop - 如何配置 localhost 的实际设置?
- javascript - Google Chrome 扩展 chrome.storage.sync 而不是 LocalStorage
- node.js - MEAN 堆栈应用程序未从 MongoDB 检索数据