考虑执行以下操作的这两个函数:给定一个单词,它会生成一个列表,其中单词中的每个位置都被字母表中的每个字符替换
alphabet = 'abcdefghijklmnopqrstuvwxyz'
版本 1(Pythonic):
def replace1_word( word ):
return [word[:w]+alphabet[i]+word[w+1:]
for w in range(len(word))
for i in range(len(alphabet))]
版本 2(非pythonic):
def replace1_word2( word ):
res=[]
for w in range(len(word)):
for i in range(len(alphabet)):
res.append( word[:w] + alphabet[i] + word[w+1:] )
return res
我使用timeit
模块运行它 1000 次并测量时间,平均运行时间差异下降到0.028
毫秒到0.040
毫秒之间。
我的问题是代码的哪一部分/哪一行在第二个版本中成本很高,为什么?它们都“似乎”以相同的方式工作并以列表格式返回相同的结果。