【Python3】3要素を比較し、2番目の大きさとなるような4要素目となる数のリストを作成する

参考:https://stackoverflow.com/questions/49000803/python-iterate-through-array-while-finding-the-mean-of-the-top-k-elements

たとえばリストaがあるとする。

a = [3, 5, 2, 7, 5, 3, 6, 8, 4]

リストaから3要素ずつを抜き出して、2番めの大きさとなるような4要素目を求める。

[3, 5, 2]なら3と5の間の4が2番目となる。同様にして、
[5, 2, 7]なら6
[2, 7, 5]なら6
[7, 5, 3]なら6
[5, 3, 6]なら5.5
[3, 6, 8]なら7
[6, 8, 4]なら7
となるようにする。そしてこれらの要素をリストにする。

提示された解決策は、

def get_means(input_list):
    means = []
    for i in range(len(input_list)-2):
        three_elements = input_list[i:i+3]
        top_two = sorted(three_elements, reverse=True)[:2]
        means.append(sum(top_two)/2.0)
    return means
def get_means(input_list):
    means = [] #空のリスト。このリストに該当する数を追加していく
    for i in range(len(input_list)-2): #Python3ではrange。たとえば9要素あるリストなら7グループについて比較するからリストの長さ-2回ループ
        three_elements = input_list[i:i+3] #input_list[0:3]はinput_listの0番目、1番目、2番目を切り抜くことになる。スライス
        top_two = sorted(three_elements, reverse=True)[:2] #抜き出した3要素をソートして、大きい2要素をスライス
        means.append(sum(top_two)/2.0) #大きい2要素を足して2で割った数を追加する
    return means

結果、

>>> print(get_means([3, 5, 2, 7, 5, 3, 6, 8, 4]))
[4.0, 6.0, 6.0, 6.0, 5.5, 7.0, 7.0]