- 2次元配列なので、1次元配列にする。
python - How to make a flat list out of list of lists - Stack Overflow
-
set() をとることで、重複する要素を削除する。
-
csv モジュールで csv 形式で出力する。
python
1import csv
2import itertools
3
4lst = [[(0.10, 'A'), (0.111, 'B'), (0.143, 'C'), (0.151, 'D'), (0.131, 'E')],
5 [(0.5, 'A'), (0.11, 'B'), (0.151, 'D'), (0.131, 'E')],
6 [(0.10, 'A'), (0.4, 'B'), (0.167, 'C'), (0.1, 'D'), (0.31, 'E')],
7 [(0.156, 'B'), (0.43, 'C'), (0.151, 'D'), (0.13, 'E')]]
8
9
10# 1次元配列にする。
11flatten = list(itertools.chain(*lst))
12# list -> set とすることで、重複を削除する。
13unique = set(flatten)
14# CSV 形式で出力する。
15with open('data.csv', 'w') as f:
16 writer = csv.writer(f, lineterminator='\n')
17 writer.writerows(unique)
追記
- 2次元配列なので、1次元配列にする。
python - How to make a flat list out of list of lists - Stack Overflow
2. タプルの2つ目のアルファベットでソートする。(3 の itertools.groupby() はソート済みのリストに対してしか使えないため)
itertools — Python 3.7.3 ドキュメント
3. itertools.groupby() でタプルの2つ目のアルファベットでグループ化する。
4. 同じグループ内でタプルの1つ目の値が最も大きい要素のみ残す。
5. csv モジュールで csv 形式で出力する。
python
1import csv
2import itertools
3from operator import itemgetter
4
5lst = [[(0.10, 'A'), (0.111, 'B'), (0.143, 'C'), (0.151, 'D'), (0.131, 'E')],
6 [(0.5, 'A'), (0.11, 'B'), (0.151, 'D'), (0.131, 'E')],
7 [(0.10, 'A'), (0.4, 'B'), (0.167, 'C'), (0.1, 'D'), (0.31, 'E')],
8 [(0.156, 'B'), (0.43, 'C'), (0.151, 'D'), (0.13, 'E')]]
9
10
11# 1次元配列にする。
12flatten = list(itertools.chain(*lst))
13# タプルの2つ目の値でソートする。(itertools.groupby() はソート済みのリストに対してしか使えないため)
14flatten.sort(key=itemgetter(1))
15# タプルのアルファベットでグルーピングする。
16unique = []
17for key, values in itertools.groupby(flatten, key=itemgetter(1)):
18 unique.append(max(values, key=itemgetter(0)))
19print(unique) # [(0.5, 'A'), (0.4, 'B'), (0.43, 'C'), (0.151, 'D'), (0.31, 'E')]
20
21# CSV 形式で出力する。
22with open('data.csv', 'w') as f:
23 writer = csv.writer(f, lineterminator='\n')
24 writer.writerows(unique)
output
10.5,A
20.4,B
30.43,C
40.151,D
50.31,E
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/19 05:03
2019/04/19 05:28 編集