Python for循环并不是在所有元素中循环
我的Python代码怎么可能没有在列表中的所有元素中循环? 我有这样的代码:Python for循环并不是在所有元素中循环,python,python-3.x,list,Python,Python 3.x,List,我的Python代码怎么可能没有在列表中的所有元素中循环? 我有这样的代码: # Get only the XML and XLSX files filesInSFTP = [file for file in filesInSFTP if file.lower().endswith(('.xml', '.xlsx'))] print("Before Sorted: " + str(filesInSFTP)) pr
# Get only the XML and XLSX files
filesInSFTP = [file for file in filesInSFTP if file.lower().endswith(('.xml', '.xlsx'))]
print("Before Sorted: " + str(filesInSFTP))
print(len(filesInSFTP))
for filename in filesInSFTP:
print("file name in loop: " + str(filename))
if filename.endswith('.xlsx'):
if 'EE Nav_Plan Mapping' not in filename:
filesInSFTP.remove(filename)
print("removed " + filename)
# order the list so that XLSX comes first, before XML
filesInSFTP = sorted(filesInSFTP, key=lambda x: os.path.splitext(x)[1])
print("After Sorted: " + str(filesInSFTP))
这是打印语句的输出:
Before Sorted: ['Ease_Plan_Mappings.xlsx', 'EE Nav_Plan Mapping.xlsx', 'advanced.xlsx', 'Manco.xlsx']
4
file name in loop: Ease_Plan_Mappings.xlsx
removed Ease_Plan_Mappings.xlsx
file name in loop: advanced.xlsx
removed advanced.xlsx
After Sorted: ['EE Nav_Plan Mapping.xlsx', 'Manco.xlsx']
如您所见,print语句没有打印“循环中的文件名:Manco.xlxs”或“循环中的文件名:EE Nav_Plan Mapping.xlsx”
为什么会这样?我需要我的for循环遍历循环前打印的整个列表
编辑:如果我的代码工作正常,那么“manco.xlsx”将从列表中删除,因为它的名称中没有“EE nav_Plan Mapping”。正如其他人所评论的那样,
filesinftp.remove(filename)
实际上是在修改您正在迭代的列表。因为在迭代完成之前移除一个元素,它跳过中间的一个元素。
一种解决方案可能是复制列表进行迭代,然后从要使用的列表中删除元素。我在迭代之前复制了列表,从而解决了这个问题
li = filesInSFTP.copy()
for filename in li:
print("file name in loop: " + str(filename))
if filename.endswith('.xlsx'):
if 'EE Nav_Plan Mapping' not in filename:
filesInSFTP.remove(filename)
print("removed " + filename)
TL;DR:
filesinftp.remove(文件名)
把事情搞砸了。不要从当前正在迭代的列表中删除。@Carcigenicate基本上是正确的。快速修复方法是将迭代行从filesinftp:中文件名的更改为列表中文件名的(filesinftp):
,因为这基本上会创建列表的副本,删除不会影响此副本它是一个列表,而不是一个数组。事实上,这就是我的结局doing@jarmod,你是对的。我编辑了这篇文章,感谢您的澄清。如果您的解决方案基本上只是做了其他人评论/回答的事情,那么没有必要将该解决方案作为一个单独的答案发布。对于像我这样的人来说,查看代码仍然很有用