for循环评估其表达式列表的次数是多少?

Ank*_*kur 5 python for-loop

我有以下代码:

list1 = [4,1,2,6]
for elem in sorted(list1):
    #some task
Run Code Online (Sandbox Code Playgroud)

我想知道Python使用该sorted()方法对列表进行多少次排序?是每次迭代还是只进行一次?

换句话说,以下代码更有效率?

list1 = [4,1,2,6]
list1 = sorted(list1)
for elem in list1:
    #some task 
Run Code Online (Sandbox Code Playgroud)

iCo*_*dez 9

在这两个代码示例中,列表仅排序一次.

in在循环开始之前,仅在for循环头中的运算符右侧的表达式被计算一次.您可以在文档中阅读相关内容:

for_stmt ::=  "for" target_list "in" expression_list ":" suite
              ["else" ":" suite]

表达式列表评估一次 ; 它应该产生一个可迭代的对象.

实际上,第二个代码示例效率较低,因为存在不必要的赋值.