1

我正在从LearnPython.org学习 Python,并遇到了这个例子:

问:打印 re 模块中所有函数的按字母顺序排序的列表,其中包含单词 find。

输出应如下所示:['findall', 'finditer']

这是我想出的:

import re
function_list = []
for function_name in dir(re):
    if "find" in function_name:
        function_list.append(function_name)
print function_list

有没有更有效/高效的方法来解决这个问题?

4

2 回答 2

7
import re
function_list = [f for f in dir(re) if 'find' in f] # faster than using list.append
function_list.sort() # faster than using sorted. This can actually be excluded, since `dir` returns a sorted list

列表推导通常比附加到列表更快。虽然我不确定为什么(我希望有人在这里插话),但我有一种感觉,这可能是因为它允许口译员预先分配;而 usinglist.append可能会使解释器处于必须将整个列表复制到内存中的新位置的状态。这是因为 python 列表在 C 中被实现为动态数组,它需要一个连续的内存块。

此外,您可能倾向于使用sorted,它使用与 相同的算法list.sort,但有一个非常重要的区别。list.sort就地(即修改列表本身),而sorted创建并返回一个新列表。在这里使用就地操作的好处是,您最终可以节省用于复制项目以创建新列表的时间。

于 2013-07-10T19:01:28.590 回答
0
import re
print re.findall('([^,]*find[^,]+)', ','.join(dir(re)))
于 2013-07-10T19:16:10.397 回答