我正在从 LearnPython.org 学习 Python并遇到了这个例子:
Q: Print an alphabetically sorted list of all functions in the re module, which contain the word 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
是否有更有效/高效的方法来解决这个问题?
请您参考如下方法:
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
列表理解通常比附加到列表更快。虽然我不确定为什么(我希望有人能在这里插话),但我觉得这可能是因为它允许解释器预先分配;而使用 list.append 可能会使解释器处于必须将整个列表复制到内存中的新位置的状态。这是因为 Python 列表在 C 中实现为动态数组,需要连续的内存块。
此外,您可能倾向于使用 sorted,它使用与 list.sort 相同的算法,但有一个非常重要的区别。 list.sort 就地(即修改列表本身),而 sorted 创建并返回一个新列表。在此处使用就地操作的优势在于,您最终可以节省时间,否则这些时间将用于复制项目以创建新列表。
