#多次元リストのソート
多次元リストをソートする際、評価基準を指定することができるようです。
また、その評価基準は複数指定できるようです。
その際、sort(key=lambda x:(x[0],x[1]))の x:以降の引数を第一引数から順に優先して評価するようです。
2Dsort_1.py
list = [[10,4],[3,6],[4,9],[5,0],[4,6],[2,0]]
list.sort(key=lambda x:x[0])
print(list)
#[[2, 0], [3, 6], [4, 9], [4, 6], [5, 0], [10, 4]]
list.sort(key=lambda x:x[1])
print (list)
#[[2, 0], [5, 0], [10, 4], [3, 6], [4, 6], [4, 9]]
list.sort(key=lambda x:(x[0],x[1]))
print (list)
#[[2, 0], [3, 6], [4, 6], [4, 9], [5, 0], [10, 4]]
また、リストの要素は数値同士でなくてもよいのです。
下のように['文字列','数値']のソートも可能。
2Dsort_2.py
list = [['ab',4],['a',6],['abc',9],['abc',0],['rklel',6],['gke',0]]
list.sort(key=lambda x:(x[0],x[1]))
print (list)
#[['a', 6], ['ab', 4], ['abc', 0], ['abc', 9], ['gke', 0], ['rklel', 6]]
#zip関数
組み込み関数 - zip() — Python 3.7.1 ドキュメント
for文で複数のリストを一度に取得可能。
zip.py
food = ['Apple', 'Bread', 'Caree']
cost = [300, 150, 600]
for name, age in zip(food, cost):
print(name, age)
#Apple 300
#Bread 150
#Caree 600
set集合
list型を集合に変えることができる。
その際リストの重複要素は取り除かれる。
辞書型はkeyの値のみを重複を取り除いた集合になる。
文字列は重複する文字を除いた一文字ずつの集合になる。
set.py
set1 = set([1,2,3,3,2,1,4,6,5,4])
set2 = set(['a','b','c','b','b','a','d'])
set3 = set({'a':'A', 'b':'B', 'c':'C','a':'A'})
set4 = set('sssaaaklm')
print(set1) # {1, 2, 3, 4, 5, 6}
print(set2) # {'b', 'c', 'a', 'd'}
print(set3) # {'b', 'c', 'a'}
print(set4) # {'m', 's', 'a', 'k', 'l'}
#参考記事
https://qiita.com/fantm21/items/6df776d99356ef6d14d4
https://uxmilk.jp/14834