当与if语句结合使用时,for循环忽略list的某些元素

时间:2015-05-13 09:32:34

标签: python list python-3.x

我想迭代列表的元素,并删除错误的元素。首先,让我们检查所有元素:

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

1 个答案:

答案 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以了解有关运行时实际发生情况的更多信息。