回答編集履歴
4
追記
answer
CHANGED
@@ -10,20 +10,20 @@
|
|
10
10
|
import csv
|
11
11
|
|
12
12
|
def renumber(IDs, data):
|
13
|
-
for k in IDs:
|
13
|
+
for k in IDs: # IDsからkey(登録済みID)を一つずつ呼び出し
|
14
|
-
diff = [abs(int(v)-int(d)) for v, d in zip(IDs[k], data[2:])]
|
14
|
+
diff = [abs(int(v)-int(d)) for v, d in zip(IDs[k], data[2:])] # 登録済みのID内容と、判定対象のID内容の各数値の差分の絶対値をとってリストに格納
|
15
|
-
if max(diff) <= 5:
|
15
|
+
if max(diff) <= 5: # 差分の最大値が5以内であれば
|
16
|
-
return [k] + data[1:]
|
16
|
+
return [k] + data[1:] # ID名を登録済みの番号に変えて値を返す
|
17
|
-
return data
|
17
|
+
return data # 登録済みIDと重複がないと判定されたら、何も変更せずに返す
|
18
18
|
|
19
|
-
IDs = dict()
|
19
|
+
IDs = dict() # 今までに出てきたIDをkey, それに付随する数値をvalueにして格納するため
|
20
20
|
with open('out.csv', 'r', encoding='UTF-8') as f:
|
21
|
-
reader = csv.reader(f)
|
21
|
+
reader = csv.reader(f) # 読み込み用のインスタンス生成
|
22
22
|
with open('inp.txt','w', encoding='UTF-8', newline="") as i:
|
23
|
-
writer = csv.writer(i)
|
23
|
+
writer = csv.writer(i) # 書き込み用のインスタンス生成
|
24
|
-
for data in reader:
|
24
|
+
for data in reader: # 一行ずつ読み込み(csvなので、カンマで区切られたリスト型)
|
25
|
-
if "ID:" in data[0]:
|
25
|
+
if "ID:" in data[0]: # 一要素目がID番号なら
|
26
|
-
data = renumber(IDs, data)
|
26
|
+
data = renumber(IDs, data) # renumber関数で±5以内の重複判定
|
27
|
-
IDs[data[0]] = data[2:]
|
27
|
+
IDs[data[0]] = data[2:] # IDsに登録(同じIDがあれば上書きしてしまうので、もしかしたら要件と違う挙動かもしれない)
|
28
28
|
writer.writerow(data)
|
29
29
|
```
|
3
修正
answer
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
IDsリストに最初に出てきたID内容を保存して、renumber関数で保存内容と比較して必要なら書き換えてます。
|
4
4
|
|
5
5
|
※修正しました
|
6
|
-
renumber
|
6
|
+
renumberが「どれか一つでも差が5以内なら同ID」という処理になっていました。
|
7
7
|
diffというリストに差分を格納して、最大が5を超えていないか確認するよう修正したことで「どれか一つでも差が5以上なら異ID」になっていると思います。
|
8
8
|
```python3
|
9
9
|
import pandas as pd
|
2
コード修正
answer
CHANGED
@@ -2,15 +2,17 @@
|
|
2
2
|
ファイルは標準ライブラリのcsvモジュールであけてます。
|
3
3
|
IDsリストに最初に出てきたID内容を保存して、renumber関数で保存内容と比較して必要なら書き換えてます。
|
4
4
|
|
5
|
+
※修正しました
|
6
|
+
renumberの中のif文が、continueになっていましたが、これだと「どれか一つでも差が5以内なら同ID」という処理でした。
|
7
|
+
diffというリストに差分を格納して、最大が5を超えていないか確認するよう修正したことで「どれか一つでも差が5以上なら異ID」になっていると思います。
|
5
8
|
```python3
|
6
9
|
import pandas as pd
|
7
10
|
import csv
|
8
11
|
|
9
12
|
def renumber(IDs, data):
|
10
13
|
for k in IDs:
|
11
|
-
for v, d in zip(IDs[k], data[2:])
|
14
|
+
diff = [abs(int(v)-int(d)) for v, d in zip(IDs[k], data[2:])]
|
12
|
-
|
15
|
+
if max(diff) <= 5:
|
13
|
-
continue
|
14
16
|
return [k] + data[1:]
|
15
17
|
return data
|
16
18
|
|
@@ -24,25 +26,4 @@
|
|
24
26
|
data = renumber(IDs, data)
|
25
27
|
IDs[data[0]] = data[2:]
|
26
28
|
writer.writerow(data)
|
27
|
-
|
28
|
-
# inp.txt
|
29
|
-
# Frame #: 1,,,,,
|
30
|
-
# Frame_time:0.03,,,,,
|
31
|
-
# Frame #: 2,,,,,
|
32
|
-
# Frame_time:0.07,,,,,
|
33
|
-
# Frame #: 3,,,,,
|
34
|
-
# ID:1,KPHN,866,800,965,850
|
35
|
-
# ID:2,KPHN,796,850,851,904
|
36
|
-
# Frame_time:0.10,,,,,
|
37
|
-
# Frame #: 4,,,,,
|
38
|
-
# ID:1,KPHN,866,800,967,851
|
39
|
-
# ID:2,KPHN,796,852,851,906
|
40
|
-
# Frame_time:0.13,,,,,
|
41
|
-
# Frame #: 5,,,,,
|
42
|
-
# ID:1,KPHN,873,799,976,851
|
43
|
-
# ID:2,KPHN,796,852,853,909
|
44
|
-
# Frame_time:0.17,,,,,
|
45
|
-
# Frame #: 6,,,,,
|
46
|
-
# ID:1,KPHN,875,799,979,853
|
47
|
-
# ID:2,KPHN,796,853,855,911
|
48
29
|
```
|
1
修正
answer
CHANGED
@@ -23,7 +23,6 @@
|
|
23
23
|
if "ID:" in data[0]:
|
24
24
|
data = renumber(IDs, data)
|
25
25
|
IDs[data[0]] = data[2:]
|
26
|
-
print(data)
|
27
26
|
writer.writerow(data)
|
28
27
|
|
29
28
|
# inp.txt
|