Pythonのリストのリストに関してかなりの質問がありましたが、まだ私が直面している問題を解決することはできません。Python - リストのリスト(変更可能性)
私は可能な限りコードを単純化しようとしましたが、私が結果として期待していることを説明しようとします。
マイコード:
import copy
class Location():
def __init__(self):
self.a_location_variable = 'a string'
self.a_location_list = []
def parse_row(self, sline):
self.a_location_variable = sline
def add_drop(self, drop):
self.a_location_list.append(copy.copy(drop))
class Drop():
def __init__(self):
self.a_drop_variable = 'also a string'
def parse_drop(self, sline):
self.a_drop_variable = sline
file = open('example.txt', 'r')
lines = file.read().split('\n')
loc = Location()
loc_list = []
drop = Drop()
all_drops = []
for i in range(40, len(lines)):
if lines[i][:4] == '5280':
loc.parse_row(lines[i])
loc_list.append(copy.copy(loc))
elif lines[i][:4] == '5301':
continue
elif lines[i][:4] == '5302':
continue
elif lines[i][:4] == '5303':
continue
else:
drop.parse_drop(lines[i])
loc_list[-1].add_drop(drop)
EXAMPLE.TXTの含有量は、行41から開始し、次いで、40ヘッダ行の存在:
5280,0, 0,+52.1216717,+004.3834450, 91.7, 4, 10, 100, 0.9
5301,2,1,4,2, 24800,1,1,"R ",2017,06,22,02,17
5302,0,0,A,p,0,1,0,0,
5303,0, 18.0, 22.5, 23.7
1, 0686, 222.0, 187.0, 170.0, 148.0, 133.0, 99.0, 75.0, 58.0, 44.0, 27.300
2, 0680, 219.0, 186.0, 169.0, 147.0, 133.0, 98.0, 74.0, 58.0, 43.0, 27.420
3, 0680, 218.0, 185.0, 168.0, 146.0, 132.0, 98.0, 74.0, 58.0, 42.0, 27.410
4, 0678, 216.0, 183.0, 167.0, 145.0, 131.0, 98.0, 73.0, 58.0, 42.0, 27.460
5280,0, 0,+52.1217967,+004.3834800, 91.7, 4, 10, 100, 0.9
5301,2,1,4,2, 24775,1,1,"M ",2017,06,22,02,18
5302,0,0,A,p,0,1,0,0,
5303,0, 18.0, 22.8, 23.6
1, 0699, 203.0, 157.0, 134.0, 108.0, 95.0, 70.0, 54.0, 45.0, 34.0, 27.190
2, 0704, 204.0, 157.0, 135.0, 109.0, 96.0, 71.0, 55.0, 45.0, 35.0, 27.300
3, 0699, 203.0, 157.0, 135.0, 109.0, 96.0, 71.0, 55.0, 45.0, 35.0, 27.200
4, 0702, 202.0, 156.0, 134.0, 108.0, 96.0, 70.0, 54.0, 45.0, 35.0, 27.480
5280,0, 0,+52.1217967,+004.3834800, 91.7, 4, 10, 100, 0.9
5301,2,1,4,2, 24750,1,1,"R ",2017,06,22,02,19
5302,0,0,A,p,0,1,0,0,
5303,0, 18.0, 22.8, 23.5
1, 0688, 226.0, 177.0, 155.0, 130.0, 115.0, 84.0, 63.0, 51.0, 38.0, 27.430
2, 0692, 224.0, 175.0, 154.0, 129.0, 115.0, 84.0, 63.0, 51.0, 39.0, 27.420
3, 0689, 223.0, 175.0, 154.0, 129.0, 115.0, 84.0, 63.0, 51.0, 39.0, 27.530
4, 0690, 223.0, 175.0, 154.0, 129.0, 116.0, 84.0, 63.0, 51.0, 38.0, 27.510
5280,0, 0,+52.1219608,+004.3839767, 91.7, 4, 10, 100, 0.9
5301,2,1,4,2, 24724,1,1,"M ",2017,06,22,02,20
5302,0,0,A,p,0,1,0,0,
5303,0, 18.0, 23.0, 23.6
1, 0700, 287.0, 208.0, 169.0, 130.0, 110.0, 75.0, 55.0, 44.0, 35.0, 27.350
2, 0700, 280.0, 203.0, 166.0, 128.0, 108.0, 74.0, 53.0, 42.0, 32.0, 27.280
3, 0697, 280.0, 204.0, 167.0, 130.0, 110.0, 76.0, 55.0, 44.0, 35.0, 27.410
4, 0698, 279.0, 203.0, 166.0, 129.0, 109.0, 75.0, 55.0, 44.0, 34.0, 27.340
たびにコードが5280で始まる行を検索し新しい場所に到達します。したがって、私が結果として期待するものはloc_listであり、4つのアイテム(クラスLocation())を含んでいます。各場所には、Drop()クラスの対応する4行からの情報を含む 'a_location_list'が含まれています。
これはうまくいきません。「loc_list」の各場所には同じ「a_location_list」が含まれています。「削除」情報を持つ16行すべての情報が含まれています'1'、 '' 2 'などで始まる)を、その場所に属する4つの代わりに使用できます。
私はこの問題に指を置くことができないので、これで私を助けることができる人は誰ですか?
可能な限り簡素化しようとしました。