Python 3.x 我需要帮助理解Python代码的一部分
我已经找到了与回答在列表中查找前两个值相关的当前代码,但是,我在理解部分代码时遇到困难,在其他地方找不到任何帮助。我想知道是否有人能告诉我每个部分是什么意思Python 3.x 我需要帮助理解Python代码的一部分,python-3.x,Python 3.x,我已经找到了与回答在列表中查找前两个值相关的当前代码,但是,我在理解部分代码时遇到困难,在其他地方找不到任何帮助。我想知道是否有人能告诉我每个部分是什么意思 numbers = [20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7] if numbers[0]>numbers[1]: m, m2 = numbers[0], numbers[1] else: m, m2 = numbers[1], numbers[0] for x in numb
numbers = [20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7]
if numbers[0]>numbers[1]:
m, m2 = numbers[0], numbers[1]
else:
m, m2 = numbers[1], numbers[0]
for x in numbers[1:]:
if x>m2:
if x>m:
m2, m = m, x # I am especially unsure of what is going on here
else:
m2 = x
m2返回74下面是一个粗略的伪代码,说明它在做什么:
numbers = [20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7] # list
# This part sets m1 and m2 to be the bigger of the first two elements in the list.
# The notation m,m2 = numbers[0], numbers[1] is equivalent to m = numbers[0] followed by m2 = numbers[1]
if numbers[0]>numbers[1]:
m, m2 = numbers[0], numbers[1]
else:
m, m2 = numbers[1], numbers[0]
for x in numbers[1:]: # iterate over list start at index 1
if x>m2: # if current element is greater than m2, we need to update m2
if x>m: # if current element is also greater than m, we need to set m2 to the value of m, and then update m to the new largest value which is x.
m2, m = m, x # This is doing m2 = m followed by m = x
else:
m2 = x # if current element is greater than m2 but not m, just update m2 to x
sorted(numbers, reverse=True) # => returns sorted version of numbers [90.8, 74, 67, 52.8, 20, 7, 7, 5, 4, 3, 3, 2.8, 2.6, 2]
sorted(numbers, reverse=True)[:2] # => splices the list to the first two elmems i.e [90.8, 74]
m, m2 = sorted(numbers, reverse=True)[:2] # => Does the confusing multiple assignment as m = first element of the list and m2 = second element of the list
上面的代码很好,而且非常明确,如果您是从Python开始的话,这也很好。还有一个单行程序可以为您做到这一点:
m, m2 = sorted(numbers, reverse=True)[:2]
说明:
numbers = [20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7] # list
# This part sets m1 and m2 to be the bigger of the first two elements in the list.
# The notation m,m2 = numbers[0], numbers[1] is equivalent to m = numbers[0] followed by m2 = numbers[1]
if numbers[0]>numbers[1]:
m, m2 = numbers[0], numbers[1]
else:
m, m2 = numbers[1], numbers[0]
for x in numbers[1:]: # iterate over list start at index 1
if x>m2: # if current element is greater than m2, we need to update m2
if x>m: # if current element is also greater than m, we need to set m2 to the value of m, and then update m to the new largest value which is x.
m2, m = m, x # This is doing m2 = m followed by m = x
else:
m2 = x # if current element is greater than m2 but not m, just update m2 to x
sorted(numbers, reverse=True) # => returns sorted version of numbers [90.8, 74, 67, 52.8, 20, 7, 7, 5, 4, 3, 3, 2.8, 2.6, 2]
sorted(numbers, reverse=True)[:2] # => splices the list to the first two elmems i.e [90.8, 74]
m, m2 = sorted(numbers, reverse=True)[:2] # => Does the confusing multiple assignment as m = first element of the list and m2 = second element of the list
不确定这个问题是否与主题有关,因此我只是发表评论
m2,m=m,x
相当于m2=m
和m=x
。代码应在m
中返回列表中的最大数字,在m2
中返回第二大数字。由于第一个if-else
,假定至少存在两个元素。它被称为并行赋值。想象一下(m2,m)=(m,x)。虽然它很简洁(而且可以说很漂亮),但像m2,m=m,x
这样的并行赋值(以及变量的重新声明)必然会引起混淆。非常感谢你帮助我理解它!我对开始有一个透彻的了解,就在它开始使用m2,m=m,x的时候,我不确定代码在做什么,因为我没有看到m=m以这种方式使用!谢谢,我也想过使用排序,这将是我提出的解决方案,但我看到了这个解决方案,并认为嘿,让我们尝试并理解这一点!