在计算机科学测试中,我被要求确定此代码的输出:
L = [12, 3, 1, 5, 13, 18, 85, 10, 2, 74, 1, 12, 3]
i = 1
while i < len(L):
L[i-1], L[i] = L[i], L[i-1]
i += 2
print(L)
代码看起来很简单,但有一点让我困惑,让我的答案错了,这就是第4行的代码
让我们举一个例子,让您了解我是如何理解这行代码的:
让我们假设i=1。
那么L[0],L[1]=L[1],L[0]
这意味着L[0]=L[1](L[0]将是3)和L[1]=L[0](这里我认为这个赋值是无用的,因为L[0]现在等于L[1]=3)
然而,当我回家用笔记本电脑执行代码时,我意识到我错了,但我仍然不明白我的错误
顺便说一句,我想可能是第4行的语法(一行中有2个作业)
因此,这实际上是python的一个特性,称为多重赋值,如果您来自其他语言,有时很难掌握。这就是它的工作原理
例如
a, b = b, a
这段代码实际上会交换元素。我将给出一个简单直观的解释,然后是一个更专业的解释
有关更详细的解释,请参阅thisSO帖子
注意:python中变量的概念与其他语言非常不同,在其他语言中,变量是某种类型的容器,用于存储该类型的值。在python中,标签是一个比变量更正确的术语,因为您只是用这个名称标记一个对象,并且该对象可以是任何数据类型。因此,为了理解这段代码,您实际上不是在交换值,而是在交换标签 因此,python首先查找标签
b
和a
在RHS上指向的值,将这些值放在那里,然后只给这些值添加新标签我希望这能把事情弄清楚
您的代码是交换列表中成对的相邻元素
L[i-1], L[i] = L[i], L[i-1]
-Python中的这种表示法交换了L[i-1]
和L[i]
的内容要更好地理解它,请参阅:https://docs.python.org/3/reference/expressions.html#evaluation-order
相关问题 更多 >
编程相关推荐