我已经看到许多带有列表推导的解决方案,并且我想知道是否可以将其转换为for循环符号。
例如,如果我有一个列表理解符号:
radix = [radix_sort(i,0) for i in lst]
如果我写下来:
for i in lst:
radix_sort(i,0)
我得到相同的输出吗?两者有什么区别?是否更有效地应用列表推导而不是传统的循环?
答案 0 :(得分:2)
列表理解会创建一个列表 - 这就是它的全部要点。但你的循环根本不会创造任何东西。所以不,你不会得到相同的“输出”。
等效循环是:
radix = []
for i in lst:
radix.append(radix_sort(i,0))
列表理解被定义为与此几乎完全相同。它可能运行得更快,至少在CPython中, * 但它会产生相同的效果。
如果radix_sort
以排序的顺序返回列表的副本,那么你的循环正在做很多工作而没有效果。但现在,与列表理解一样,您将保存所有工作的结果。
另一方面,如果radix_sort
对列表进行了就地排序而没有返回任何内容,那么列表推导和append
的显式循环都会产生误导,你应该只使用它没有append
的循环。
*例如,在理解中,在循环完成之前,您无法访问radix
,因此编译器可以做出一些假设并使用更快的方式附加到列表。子>