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

下面是一个粗略的伪代码,说明它在做什么:

  • m将跟踪列表中最大的变量,m2将跟踪第二大变量
  • 最初,m和m2将只是列表中的前两个元素,m将是前两个元素中较大的元素,而m2将是前两个元素中较小的元素
  • 然后从索引1开始迭代列表,对于每个元素x,首先检查它是否大于当前m2。如果是,则需要更新m2,因为它不再是第二大元素。您还需要检查x是否大于m(这应该是列表中最大的元素),如果是,则将m更新为x,将m2更新为m之前的值
  • 我对下面的代码进行了注释,并给出了解释:

    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以这种方式使用!谢谢,我也想过使用排序,这将是我提出的解决方案,但我看到了这个解决方案,并认为嘿,让我们尝试并理解这一点!