回答編集履歴

4

追記

2020/12/17 23:08

投稿

jeanbiego
jeanbiego

スコア3966

test CHANGED
@@ -22,35 +22,35 @@
22
22
 
23
23
  def renumber(IDs, data):
24
24
 
25
- for k in IDs:
25
+ for k in IDs: # IDsからkey(登録済みID)を一つずつ呼び出し
26
26
 
27
- diff = [abs(int(v)-int(d)) for v, d in zip(IDs[k], data[2:])]
27
+ diff = [abs(int(v)-int(d)) for v, d in zip(IDs[k], data[2:])] # 登録済みのID内容と、判定対象のID内容の各数値の差分の絶対値をとってリストに格納
28
28
 
29
- if max(diff) <= 5:
29
+ if max(diff) <= 5: # 差分の最大値が5以内であれば
30
30
 
31
- return [k] + data[1:]
31
+ return [k] + data[1:] # ID名を登録済みの番号に変えて値を返す
32
32
 
33
- return data
33
+ return data # 登録済みIDと重複がないと判定されたら、何も変更せずに返す
34
34
 
35
35
 
36
36
 
37
- IDs = dict()
37
+ IDs = dict() # 今までに出てきたIDをkey, それに付随する数値をvalueにして格納するため
38
38
 
39
39
  with open('out.csv', 'r', encoding='UTF-8') as f:
40
40
 
41
- reader = csv.reader(f)
41
+ reader = csv.reader(f) # 読み込み用のインスタンス生成
42
42
 
43
43
  with open('inp.txt','w', encoding='UTF-8', newline="") as i:
44
44
 
45
- writer = csv.writer(i)
45
+ writer = csv.writer(i) # 書き込み用のインスタンス生成
46
46
 
47
- for data in reader:
47
+ for data in reader: # 一行ずつ読み込み(csvなので、カンマで区切られたリスト型)
48
48
 
49
- if "ID:" in data[0]:
49
+ if "ID:" in data[0]: # 一要素目がID番号なら
50
50
 
51
- data = renumber(IDs, data)
51
+ data = renumber(IDs, data) # renumber関数で±5以内の重複判定
52
52
 
53
- IDs[data[0]] = data[2:]
53
+ IDs[data[0]] = data[2:] # IDsに登録(同じIDがあれば上書きしてしまうので、もしかしたら要件と違う挙動かもしれない)
54
54
 
55
55
  writer.writerow(data)
56
56
 

3

修正

2020/12/17 23:08

投稿

jeanbiego
jeanbiego

スコア3966

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ※修正しました
10
10
 
11
- renumberの中のif文、continueになっていましたが、これだと「どれか一つでも差が5以内なら同ID」という処理した。
11
+ renumberが「どれか一つでも差が5以内なら同ID」という処理になっていました。
12
12
 
13
13
  diffというリストに差分を格納して、最大が5を超えていないか確認するよう修正したことで「どれか一つでも差が5以上なら異ID」になっていると思います。
14
14
 

2

コード修正

2020/12/15 23:46

投稿

jeanbiego
jeanbiego

スコア3966

test CHANGED
@@ -5,6 +5,12 @@
5
5
  IDsリストに最初に出てきたID内容を保存して、renumber関数で保存内容と比較して必要なら書き換えてます。
6
6
 
7
7
 
8
+
9
+ ※修正しました
10
+
11
+ renumberの中のif文が、continueになっていましたが、これだと「どれか一つでも差が5以内なら同ID」という処理でした。
12
+
13
+ diffというリストに差分を格納して、最大が5を超えていないか確認するよう修正したことで「どれか一つでも差が5以上なら異ID」になっていると思います。
8
14
 
9
15
  ```python3
10
16
 
@@ -18,11 +24,9 @@
18
24
 
19
25
  for k in IDs:
20
26
 
21
- for v, d in zip(IDs[k], data[2:]):
27
+ diff = [abs(int(v)-int(d)) for v, d in zip(IDs[k], data[2:])]
22
28
 
23
- if abs(int(v)-int(d)) > 5:
29
+ if max(diff) <= 5:
24
-
25
- continue
26
30
 
27
31
  return [k] + data[1:]
28
32
 
@@ -50,46 +54,4 @@
50
54
 
51
55
  writer.writerow(data)
52
56
 
53
-
54
-
55
- # inp.txt
56
-
57
- # Frame #: 1,,,,,
58
-
59
- # Frame_time:0.03,,,,,
60
-
61
- # Frame #: 2,,,,,
62
-
63
- # Frame_time:0.07,,,,,
64
-
65
- # Frame #: 3,,,,,
66
-
67
- # ID:1,KPHN,866,800,965,850
68
-
69
- # ID:2,KPHN,796,850,851,904
70
-
71
- # Frame_time:0.10,,,,,
72
-
73
- # Frame #: 4,,,,,
74
-
75
- # ID:1,KPHN,866,800,967,851
76
-
77
- # ID:2,KPHN,796,852,851,906
78
-
79
- # Frame_time:0.13,,,,,
80
-
81
- # Frame #: 5,,,,,
82
-
83
- # ID:1,KPHN,873,799,976,851
84
-
85
- # ID:2,KPHN,796,852,853,909
86
-
87
- # Frame_time:0.17,,,,,
88
-
89
- # Frame #: 6,,,,,
90
-
91
- # ID:1,KPHN,875,799,979,853
92
-
93
- # ID:2,KPHN,796,853,855,911
94
-
95
57
  ```

1

修正

2020/12/15 23:44

投稿

jeanbiego
jeanbiego

スコア3966

test CHANGED
@@ -48,8 +48,6 @@
48
48
 
49
49
  IDs[data[0]] = data[2:]
50
50
 
51
- print(data)
52
-
53
51
  writer.writerow(data)
54
52
 
55
53