【问题标题】:Using list comprehension. with nested if使用列表理解。带有嵌套 if
【发布时间】:2020-10-14 04:59:32
【问题描述】:

给定一个文件名列表,我们希望将所有扩展名为 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"]

【问题讨论】:

    标签: python for-loop list-comprehension nested-if


    【解决方案1】:

    您可以简单地将.hpp 替换为.h

    filenames = ["program.c", "stdio.hpp", "sample.hpp", "a.out", "math.hpp", "hpp.out"]
    x=[x.replace(".hpp",".h") for x in filenames]
    print (x)
    

    输出:

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

    【讨论】:

      【解决方案2】:

      我认为你需要

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

      【讨论】:

      • 这解决了 OP 方法的问题,但它不是最简单或最好的解决方案(因为存在str.replace),应该更详细地解释。
      猜你喜欢
      • 2018-03-18
      • 1970-01-01
      • 2013-05-10
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      相关资源
      最近更新 更多