我是python和编程的新手,目前正在学习基础知识。在下面的脚本中,我试图检查每个列表元素中的字母数,并删除具有五个或更多字母的字母。我正在使用for循环来实现这一点,但是由于列表元素数量的变化而导致出现问题,这与最初考虑的for循环范围不对应。我试图让范围变化,但我仍然得到错误。
# -*- coding: utf-8 -*-
magicians =['alice','david','carolina']
def counter(word):
x= sum (c != ' ' for c in word)
return x
print magicians
for i in range (0,3):
magicians[i]=magicians[i].title()
print magicians
q=
Y=range (0,q)
for i in Y:
x= counter(magicians[i])
print x
if x<=5:
print 'this component will be deleted:', magicians[i]
del magicians[i]
q=q-1
Y=range (0,q)
print magicians
谢谢
答案 0 :(得分:0)
您的代码的主要问题是,循环中的Y = ...
不会对Y
中的for i in Y
产生影响。
for i in Y:
...
Y=range (0,q)
您可以更改您的代码以使用while
循环,并手动管理当前索引和最大索引,但这很容易出错:
i = 0
while i < q:
x= counter(magicians[i])
if x<=5:
print 'this component will be deleted:', magicians[i]
del magicians[i]
q=q-1
else:
i += 1
不是在迭代同一列表时从列表中删除元素,而是填充第二个列表,只保留要保留的元素,例如,更好的做法。使用列表理解:
good_magicians = [m for m in magicians if counter(m) > 5]
答案 1 :(得分:-1)
在这篇文章中,您的问题有一个复杂的答案:Remove items from a list while iterating
最简单的方法是创建一个仅包含您实际需要的元素的新列表。