Site icon Amelt.net

pythonで配列の要素に対してsortedする方法

Amelt

Amelt

This post is also available in: 日本語 (Japanese)

pythonを使っていて、配列の要素(配列中の配列の要素)になんらかの処理を行なった上、sorted関数にて並べ替えを行いたい...という場合のコードをメモとして書きとめています。

以下の例ではそれぞれ、こんな感じです。
print output00:3番目(data[i][3])のリスト中の平均を計算してソートする
print output01:2番目(data[i][2])のリスト中の数値によってソートする
print output02:1番目(data[i][1])の文字列の値によってソートする

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def str_element(x):
	return x[0]

def num_element(x):
	return x[1]

def average(x):
	return sum(x[2])/len(x[2])

data = [
[["dataA"],[999],[1.0, 5.0, 10.0]],
[["dataB"],[888],[2.0, 4.0, 200.0]],
[["dataC"],[777],[3.0, 3.0, 300.0]]
]

output00 = sorted(data, key=lambda x: average(x))
output01 = sorted(data, key=lambda x: num_element(x))
output02 = sorted(data, key=lambda x: average(x))

print output00 # [[['dataA'], [999], [1.0, 5.0, 10.0]], [['dataB'], [888], [2.0, 4.0, 200.0]], [['dataC'], [777], [3.0, 3.0, 300.0]]]
print output01 # [[['dataC'], [777], [3.0, 3.0, 300.0]], [['dataB'], [888], [2.0, 4.0, 200.0]], [['dataA'], [999], [1.0, 5.0, 10.0]]]
print output02 # [[['dataA'], [999], [1.0, 5.0, 10.0]], [['dataB'], [888], [2.0, 4.0, 200.0]], [['dataC'], [777], [3.0, 3.0, 300.0]]]