Skip to main content
 首页 » 编程设计

python之谁能告诉我如何在不使用循环的情况下做到这一点

2025年05月04日16mayingbao

如果不使用循环就无法创建此列表,我会满足于尽量减少创建此列表所需的时间。目标是创建一个二维数组,其中包含 10 个左右文件夹中每个 100 个 pdf 文件的文件名。告诉我你的想法:

    foldernames = [  
        'Named_folder00/', 
        'Named_folder01/', 
        'Named_folder02/', 
        'Named_folder03/', 
        'Named_folder04/', 
        'Named_folder05/', 
        'Named_folder06/', 
        'Named_folder07/', 
        'Named_folder08/', 
        'Named_folder09/', 
        ] 
 
    pages = [] 
    for b in xrange(len(foldernames)): 
        pg_temp = [ 
            foldernames[b] + 'title1', 
            foldernames[b] + 'title2', 
            foldernames[b] + 'title3' 
            ] 
        pg_temp += [ foldernames[b] + '0' + str(j) for j in xrange(1,10) ] 
        pg_temp += [ foldernames[b] + str(k) for k in xrange(10,100) ] 
        for c in xrange(len(pg_temp)): 
            pg_temp[c] += '.pdf' 
        pages.append(pg_temp) 

请您参考如下方法:

如果目标是功能性的,请考虑使用 map() 将列表推导式替换为等效项。这会将您的代码转换为:

pages = map(lambda foldername: 
                map((foldername + 'title%d').__mod__, xrange(1,4)) + 
                map((foldername + '%02d.pdf').__mod__, xrange(1,100)), 
            foldernames) 

可以说,新代码更易读,速度更快,功能更强大。

或者,可以预先计算标题和 pdf,然后使用 itertools.product 与文件夹名称 组合, itertools.starmap和 str.__add__。这应该是最快的版本:

from itertools import product, starmap 
 
titles = map('title%d'.__mod__, xrange(1, 4)) 
pdfs = map('%02d.pdf'.__mod__, xrange(1, 100)) 
pages = list(starmap(str.__add__, product(foldernames, (titles + pdfs))))