我写了一个python程序如下:
from os import listdir
def getfilename():
namelist=listdir(".")
print namelist
for name in namelist:
print name
if 'lp' in name:
namelist.remove(name)
return namelist
当我在命令行上运行它并打印返回值时,结果是:
['all_test1.list', 'all_test2.list', 'lp.py', 'lp.pyc', 'lp.test', 'straightrnd_test1.list', 'straightrnd_test2.list', 'straightrnd_train.list']
all_test1.list
all_test2.list
lp.py
lp.test
straightrnd_test2.list
straightrnd_train.list
['all_test1.list', 'all_test2.list', 'lp.pyc', 'straightrnd_test1.list', 'straightrnd_test2.list', 'straightrnd_train.list']
文件的私人股本'迷失在for循环中,所以返回值包含它,我想从列表中删除它,我该怎么办?为什么元素在for循环中丢失?你知道吗
您正在修改正在迭代的列表。使用列表理解:
newlist = [x for x in namelist if 'lp' not in x]
这个question很好地解决了这个问题,但简而言之:
即使您没有通过元素的索引显式地循环列表,Python还是会在内部为您完成这项工作。你知道吗
就好像你写了这样的东西:
因此,当您在迭代过程中移除一个元素时,它会将循环指针移动一次太多,这就是您观察到的问题。你知道吗
请注意,在您的情况下,您可以只写:
尽管名称
getfilename
有点奇怪,但它实际上返回了一个列表。。。但这是另一个问题。你知道吗相关问题 更多 >
编程相关推荐