Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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 使用列表理解。带嵌套if_Python_For Loop_List Comprehension_Nested If - Fatal编程技术网

Python 使用列表理解。带嵌套if

Python 使用列表理解。带嵌套if,python,for-loop,list-comprehension,nested-if,Python,For Loop,List Comprehension,Nested If,给定一个文件名列表,我们希望将扩展名为hpp的所有文件重命名为扩展名为h。为此,我们希望生成一个名为newfilenames的新列表,由新文件名组成。使用列表理解 filenames = ["program.c", "stdio.hpp", "sample.hpp", "a.out", "math.hpp", "hpp.out"] newfilenames = [filenam

给定一个文件名列表,我们希望将扩展名为hpp的所有文件重命名为扩展名为h。为此,我们希望生成一个名为newfilenames的新列表,由新文件名组成。使用列表理解

filenames = ["program.c", "stdio.hpp", "sample.hpp", "a.out", "math.hpp", "hpp.out"]
newfilenames = [filename[:len(filename) - 3] + "h" for filename in filenames if filename.endswith("p")]
print(newfilenames)
输出来了[stdio.h,sample.h,math.h] 应该是[program.c,stdio.h,sample.h,a.out,math.h,hpp.out]

我想你需要

filenames = [i[:-3]+"h" if i.split(".")[-1]=="hpp" else i for i in filenames]

print(filenames)
我想你需要

filenames = [i[:-3]+"h" if i.split(".")[-1]=="hpp" else i for i in filenames]

print(filenames)

只需将.hpp替换为.h即可

输出:

['program.c', 'stdio.h', 'sample.h', 'a.out', 'math.h', 'hpp.out']

只需将.hpp替换为.h即可

输出:

['program.c', 'stdio.h', 'sample.h', 'a.out', 'math.h', 'hpp.out']

这解决了OP方法的问题,但它不是最简单或最好的解决方案,因为str.replace存在,因此应该对其进行更详细的解释。这解决了OP方法的问题,但它不是最简单或最好的解决方案,因为str.replace存在,因此应该对其进行更详细的解释。