回答編集履歴

4

d

2019/04/19 05:30

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -123,3 +123,19 @@
123
123
  writer.writerows(unique)
124
124
 
125
125
  ```
126
+
127
+
128
+
129
+ ```output
130
+
131
+ 0.5,A
132
+
133
+ 0.4,B
134
+
135
+ 0.43,C
136
+
137
+ 0.151,D
138
+
139
+ 0.31,E
140
+
141
+ ```

3

d

2019/04/19 05:30

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -78,7 +78,7 @@
78
78
 
79
79
  import itertools
80
80
 
81
- import operator
81
+ from operator import itemgetter
82
82
 
83
83
 
84
84
 
@@ -100,15 +100,15 @@
100
100
 
101
101
  # タプルの2つ目の値でソートする。(itertools.groupby() はソート済みのリストに対してしか使えないため)
102
102
 
103
- flatten.sort(key=operator.itemgetter(1))
103
+ flatten.sort(key=itemgetter(1))
104
104
 
105
105
  # タプルのアルファベットでグルーピングする。
106
106
 
107
107
  unique = []
108
108
 
109
- for key, values in itertools.groupby(flatten, key=operator.itemgetter(1)):
109
+ for key, values in itertools.groupby(flatten, key=itemgetter(1)):
110
110
 
111
- unique.append(max(values, key=lambda x: x[0]))
111
+ unique.append(max(values, key=itemgetter(0)))
112
112
 
113
113
  print(unique) # [(0.5, 'A'), (0.4, 'B'), (0.43, 'C'), (0.151, 'D'), (0.31, 'E')]
114
114
 

2

2019/04/19 05:30

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -49,3 +49,77 @@
49
49
  writer.writerows(unique)
50
50
 
51
51
  ```
52
+
53
+
54
+
55
+ ## 追記
56
+
57
+
58
+
59
+ 1. 2次元配列なので、1次元配列にする。
60
+
61
+ [python - How to make a flat list out of list of lists - Stack Overflow](https://stackoverflow.com/questions/952914/how-to-make-a-flat-list-out-of-list-of-lists)
62
+
63
+ 2. タプルの2つ目のアルファベットでソートする。(3 の itertools.groupby() はソート済みのリストに対してしか使えないため)
64
+
65
+ [itertools — Python 3.7.3 ドキュメント](https://docs.python.org/ja/3/library/itertools.html#itertools.groupby)
66
+
67
+ 3. itertools.groupby() でタプルの2つ目のアルファベットでグループ化する。
68
+
69
+ 4. 同じグループ内でタプルの1つ目の値が最も大きい要素のみ残す。
70
+
71
+ 5. csv モジュールで csv 形式で出力する。
72
+
73
+
74
+
75
+ ```python
76
+
77
+ import csv
78
+
79
+ import itertools
80
+
81
+ import operator
82
+
83
+
84
+
85
+ lst = [[(0.10, 'A'), (0.111, 'B'), (0.143, 'C'), (0.151, 'D'), (0.131, 'E')],
86
+
87
+ [(0.5, 'A'), (0.11, 'B'), (0.151, 'D'), (0.131, 'E')],
88
+
89
+ [(0.10, 'A'), (0.4, 'B'), (0.167, 'C'), (0.1, 'D'), (0.31, 'E')],
90
+
91
+ [(0.156, 'B'), (0.43, 'C'), (0.151, 'D'), (0.13, 'E')]]
92
+
93
+
94
+
95
+
96
+
97
+ # 1次元配列にする。
98
+
99
+ flatten = list(itertools.chain(*lst))
100
+
101
+ # タプルの2つ目の値でソートする。(itertools.groupby() はソート済みのリストに対してしか使えないため)
102
+
103
+ flatten.sort(key=operator.itemgetter(1))
104
+
105
+ # タプルのアルファベットでグルーピングする。
106
+
107
+ unique = []
108
+
109
+ for key, values in itertools.groupby(flatten, key=operator.itemgetter(1)):
110
+
111
+ unique.append(max(values, key=lambda x: x[0]))
112
+
113
+ print(unique) # [(0.5, 'A'), (0.4, 'B'), (0.43, 'C'), (0.151, 'D'), (0.31, 'E')]
114
+
115
+
116
+
117
+ # CSV 形式で出力する。
118
+
119
+ with open('data.csv', 'w') as f:
120
+
121
+ writer = csv.writer(f, lineterminator='\n')
122
+
123
+ writer.writerows(unique)
124
+
125
+ ```

1

d

2019/04/19 05:28

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -7,6 +7,8 @@
7
7
  2. set() をとることで、重複する要素を削除する。
8
8
 
9
9
 
10
+
11
+ 3. csv モジュールで csv 形式で出力する。
10
12
 
11
13
 
12
14