たとえばリスト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
となるようにする。そしてこれらの要素をリストにする。
提示された解決策は、
1 2 3 4 5 6 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 |
1 2 3 4 5 6 7 |
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]
[4.0, 6.0, 6.0, 6.0, 5.5, 7.0, 7.0]