将列表理解符号转换为for循环

时间:2018-03-18 07:40:39

标签: python

我已经看到许多带有列表推导的解决方案,并且我想知道是否可以将其转换为for循环符号。

例如,如果我有一个列表理解符号:

radix = [radix_sort(i,0) for i in lst]

如果我写下来:

for i in lst:
   radix_sort(i,0)

我得到相同的输出吗?两者有什么区别?是否更有效地应用列表推导而不是传统的循环?

1 个答案:

答案 0 :(得分:2)

列表理解会创建一个列表 - 这就是它的全部要点。但你的循环根本不会创造任何东西。所以不,你不会得到相同的“输出”。

等效循环是:

radix = []
for i in lst:
    radix.append(radix_sort(i,0))

列表理解被定义为与此几乎完全相同。它可能运行得更快,至少在CPython中, * 但它会产生相同的效果。

如果radix_sort以排序的顺序返回列表的副本,那么你的循环正在做很多工作而没有效果。但现在,与列表理解一样,您将保存所有工作的结果。

另一方面,如果radix_sort对列表进行了就地排序而没有返回任何内容,那么列表推导和append的显式循环都会产生误导,你应该只使用它没有append的循环。

*例如,在理解中,在循环完成之前,您无法访问radix,因此编译器可以做出一些假设并使用更快的方式附加到列表。