Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python for循环并不是在所有元素中循环_Python_Python 3.x_List - Fatal编程技术网

Python for循环并不是在所有元素中循环

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

我的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))
        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,你是对的。我编辑了这篇文章,感谢您的澄清。如果您的解决方案基本上只是做了其他人评论/回答的事情,那么没有必要将该解决方案作为一个单独的答案发布。对于像我这样的人来说,查看代码仍然很有用