x=int(input("limit"))
n=[]
for i in range (x):
k=input("number to add")
n.append(k)
print "to pop the multiples of five"
print n
for no in n:
if (no%5==0):
n.pop(no)
print n
我的流行指数超出范围,但据我检查那里没有错误..请帮助我,快速
答案 0 :(得分:0)
<强> Explaintion 强>
You are using pop()
wrong. pop(x)
接受一个参数并弹出或删除该索引,而不是项目。因此,当您pop(5)
未从列表中弹出5时,您将弹出索引5
。这就是为什么你得到索引超出范围的错误。试试这个(请注意,这仍然是错误的,但这是为了教导pop的功能):
x = [1,2,3,4,9,10,10,10]
for i,no in enumerate(x):
if (no%5==0):
x.pop(i)
print(x) #prints out : [1, 2, 3, 4, 9, 10]
enumerate()
基本上采用列表或字典或元组,并返回索引和该索引中的项。例如:
x = [1,2,3,4,9]
for index, item in enumerate(x):
print("index {}, item {}".format(index,item))
打印出来:
index 0, item 1
index 1, item 2
index 2, item 3
index 3, item 4
index 4, item 9
使用enumerate()
我们可以获取索引并仍然测试该值并使用它来改变它,例如pop()
。现在,在我们通过它时更改列表是个坏主意。为什么呢?
在迭代它时(循环遍历它)修改容器(在这种情况下为pop()
list
)的问题是你可能会删除值。这是一个例子:
alist = [5, 6, 7]
for index, value in enumerate(alist):
del alist[index]
print(alist)
# Out: [6]
为什么循环后它只包含[6]
而不是空列表?好吧,第一次迭代它删除了第一个项目,即索引0中的5
。这很好,但现在列表是[6,7]
,6
在索引槽0中。当下一个循环时发生时,7
位于索引槽1
中,因为每次将列表的大小减少一个。因此我们跳过了插槽0中的值6
。在第二个循环之后,我们完成了for循环,因为没有任何东西可以循环。
<强>解决方案强>
n = [1,2,3,4,9,10,10,10]
new_list = []
for no in n:
if (no%5!=0):
new_list.append(no)
print n # gives [1, 2, 3, 4, 9]
制作一个新列表,并根据您的条件为该列表添加值,因为您想删除x % 5 == 0
项,如果它不等于零,我们可以添加项。
如果你想要更多“Pythonic”或花哨或一个衬垫,你可以做:
x = [1,2,3,4,9,10,10,10]
new_list = [a for a in x if a % 5 != 0]
print(new_list)
它被称为list comprehension。在Python中非常有用。
答案 1 :(得分:0)
格雷厄姆说你正在以错误的方式使用列表。下面的代码可以给你更好的想法。
x=int(input("limit"))
n=[]
for i in range (x):
k=input("number to add")
n.append(k)
print "to pop the multiples of five"
print n
for no in n:
if (no%5==0):
n.pop(n.index(no)) # remove index of element you want to remove
print n