は、それが何をしているかのラフな擬似コードです:
- メートルのリストとm2で最大の変数を追跡します第二のトラックを保持します最大。
- 最初にmとm2はリストの最初の2つの要素になり、mは最初の2つのうち大きい方になりますが、m2は最初の2つのうち小さい方になります
- 次に、インデックス1各要素xについて、最初にそれが現在のm2より大きいかどうかをチェックします。そうであれば、それはもはや2番目に大きい要素ではないため、m2を更新する必要があります。また、xがmより大きいかどうかを調べる必要があります。もしxmがxとm2になるようにmを更新すると、以前の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
上記のコードは素晴らしいので、Pythonを使い始めるとよいです。あなたのためにこれを行いますより1つのライナーもあります:
m, m2 = sorted(numbers, reverse=True)[:2]
は説明:この質問は上のトピックである場合
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'に相当します。 2番目に大きな数字である 'm2'の中で、コードは' m'でリストの最大数を返さなければなりません。最初の 'if-else'のために、少なくとも2つの要素が存在すると想定されます。 –
呼び出された並列割当て。 (m2、m)=(m、x)のように考える。 – YOU
これは簡潔ですが(おそらくかなり)、 'm2、m = m、x'のような並列代入(および変数の再宣言)は混乱の原因になります。 ['可読性カウント](https://www.python.org/dev/peps/pep-0020/)。 –