如果不使用循环就无法创建此列表,我会满足于尽量减少创建此列表所需的时间。目标是创建一个二维数组,其中包含 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))))
