我想迭代列表的元素,并删除错误的元素。首先,让我们检查所有元素:
tikzFiles=['keepme.tikz','inputs.tex','bla1.bat','bla2.tex','bla3.py']
for sFile in tikzFiles:
print(sFile)
print(sFile.endswith('.tikz'))
这导致了预期的结果:
keepme.tikz
True
inputs.tex
False
bla1.bat
False
bla2.tex
False
bla3.py
False
然而,还有两行
for sFile in tikzFiles:
print(sFile)
print(sFile.endswith('.tikz'))
if not sFile.endswith('.tikz'):
tikzFiles.remove(sFile)
让for循环忽略元素'bla1.bat'和'bla3.py':
keepme.tikz
True
inputs.tex
False
bla2.tex
False
答案 0 :(得分:3)
使用list comprehension创建一个只包含所需元素的新列表,例如
>>> tikzFiles = ['keepme.tikz', 'inputs.tex', 'bla1.bat', 'bla2.tex', 'bla3.py']
>>> [file for file in tikzFiles if file.endswith('.tikz')]
['keepme.tikz']
注意:更常见的是,在迭代时从集合中删除元素是个坏主意。检查this answer以了解有关运行时实际发生情况的更多信息。