У меня есть двумерный массив (вложенный цикл), который сравнивает два списка, правильный формат и неправильный формат, используя расстояние Хемминга, в котором, если разница между строками в правильном и неправильном формате = 1, это добавляет правильный формат ктретий список «исправлен» и удаляет форматированную строку из списка неправильного формата.
данные в списках выглядят так:
['BWI0520BG6,ATT7791R,AMS,DEN,1420564394,1001\n',
'BWI0520BG6,BER7172M,KUL,LAS,1420565167,1848\n',]
, поэтому мне нужно нарезать их, чтобы получить каждыйчасть списка для сравнения правильных и неправильных списков
код, используемый для сравнения между ними
corrected = []
correct_format = ['EZC9678QI6,VYW5940P,LAS,SIN,1420565203,1843\n',
'EZC9678QI6,RUM0422W,MUC,MAD,1420563539,194\n',
'CKZ3132BR4,XXQ4064B,JFK,FRA,1420563917,802\n',
'HCA3158QA6,GMO5938W,LHR,PEK,1420564317,1057\n',
'JBE2302VO4,VDC9164W,FCO,LAS,1420564698,1276\n',
'XFG5747ZT9,PME8178S,DEN,PEK,1420564409,1322\n',
'CDC0302NN5,QHU1140O,CDG,LAS,1420564498,1133\n',
'CYJ0225CH1,YZO4444S,BKK,MIA,1420565330,2027\n',
'PIT2755XC1,VYW5940P,LAS,SIN,1420565203,1843\n',
'IEG9308EA5,SQU6245R,DEN,FRA,1420564460,1049\n',
'LLZ3798PE3,ULZ8130D,CAN,DFW,1420564983,1683\n',
'LLZ3798PE3,MBA8071P,KUL,PEK,1420563856,572\n',
'PIT2755XC1,SOH3431A,ORD,MIA,1420563649,250\n',
'XFG5747ZT9,XXQ4064B,JFK,FRA,1420563917,802\n',
'HCA3158QA6,SQU6245R,DEN,FRA,1420564460,1049\n',
'JBE2302VO4,HZT2506M,IAH,AMS,1420564324,1044\n',
'VZY2993ME1,WSK1289Z,CLT,DEN,1420563542,278\n',
'SJD8775RZ4,TMV7633W,UGK,DXB,1420563958,849\n',
'EDV2089LK5,ATT7791R,AMS,DEN,1420564394,1001\n',
'SPR4484HA6,VDC9164W,FCO,LAS,1420564698,1276\n',
'UES9151GS5,DAU2617A,CGK,SFO,1420564986,1811\n',
'WBE6935NU3,KJR6646J,IAH,BKK,1420565203,1928\n',
'CDC0302NN5,XIL3623J,PEK,LAX,1420564414,1302\n',
'WYU2010YH8,JVY9791G,PVG,FCO,1420564561,1189\n']
wrong_format = ['BWI0520BG6,VYW5940P,LAS,SI|,1420565203,1843\n',
'CKZ3132BR4,RUM0422W,MUC,;AD,1420563539,194\n',
'CKZ313\\BR4,QHU1140O,CDG,LAS,1420564498,1133\n',
'CXN7304ER2,GMO593[W,LHR,PEK,1420564317,1057\n',
'CXN7304ER2,VDCP164W,FCO,LAS,1420564698,1276\n',
'DAZ3029XA0,WPW9201U,DFW,yEK,1420564869,1452\n',
'HGO4350KK1,QHU1140O,CDG,vAS,1420564498,1133\n',
'JJM4724RF7,YZO4444S,BKK,MI^,1420565330,2027\n',
'KKP5277HZ7,VYW5940P,LAS,:IN,1420565203,1843\n',
'MXU9187YC7,MOO1786A,MAD,]RA,1420563408,184\n',
'ONL0812DH1,BER7172M,KUL,[AS,1420565167,1848\n',
'PAJ3974RK1,EWH6301Y,~AN,DFW,1420564967,1683\n',
'POP2875LH3,MBw8071P,KUL,PEK,1420563856,572\n',
'PUD8209OG3,SOH3431A,OR8,MIA,1420563649,250\n',
'PUD8209OG3,XXQ4064%,JFK,FRA,1420563917,802\n',
'SJD8775RZ4,4QU6245R,DEN,FRA,1420564460,1049\n',
'SJD8775RZ4,HZT2506M,IAH,#MS,1420564324,1044\n',
'SJD8775RZ4,WSK1289Z,CLT,vEN,1420563542,278\n',
'SJD8|75RZ4,ULZ8130D,CAN,DFW,1420564983,1683\n',
'SPR4484HA6,ATT7791R,AM%,DEN,1420564394,1001\n',
'SPRb484HA6,VYW5940P,LAS,SIN,1420565203,1843\n',
'UES915*GS5,SQU6245R,DEN,FRA,1420564460,1049\n',
'WBE6935NU$,XOY7948U,ATL,LHR,1420564038,877\n',
'WTC9125IE5,XIL3623J,PEK,L}X,1420564414,1302\n',
'WYU2010YH8,XIL3623J,PEe,LAX,1420564414,1302\n',
'WYu2010YH8,FYL5866L,ATL,HKG,1420565140,1751\n',
'YMH6360YP0,ATT7791R,A;S,DEN,1420564394,1001\n']
def hamming_distance(s1, s2):
return sum(c1 != c2 for c1, c2 in zip(s1, s2))
for r in correct_format:
for i in wrong_format:
if hamming_distance(r[0:10], i[0:10]) == 1:
corrected.append(r)
wrong_format.remove(i)
elif hamming_distance(r[11:19], i[11:19]) == 1:
corrected.append(r)
wrong_format.remove(i)
elif hamming_distance(r[20:23], i[20:23]) == 1:
corrected.append(r)
wrong_format.remove(i)
elif hamming_distance(r[24:27], i[24:27]) == 1:
corrected.append(r)
wrong_format.remove(i)
Итак, исправленный список, как ожидается, будет заполнен правильным форматом инеправильный формат должен быть пустым
corrected = ['POP2875LH3,MBW8071P,KUL,PEK,1420563856,572\n',
'UES9157GS5,SQU6245R,DEN,FRA,1420564460,1049\n',
'CXN7304ER2,GMO5937W,LHR,PEK,1420564317,1057\n',
'SJD8775RZ4,BQU6245R,DEN,FRA,1420564460,1049\n',
'PUD8209OG3,XXQ4064X,JFK,FRA,1420563917,802\n',
'SJD8775RZ4,ULZ8130D,CAN,DFW,1420564983,1683\n',
'ONL0812DH1,BER7172M,KUL,LAS,1420565167,1848\n',
'YMH6360YP0,ATT7791R,AMS,DEN,1420564394,1001\n',]
Однако, это то, что я получаю
corrected = ['POP2875LH3,MBW8071P,KUL,PEK,1420563856,572\n',
'UES9157GS5,SQU6245R,DEN,FRA,1420564460,1049\n',
'UES9157GS5,SQU6245R,DEN,FRA,1420564460,1049\n',
'CXN7304ER2,GMO5937W,LHR,PEK,1420564317,1057\n',
'SJD8775RZ4,4QU6245R,DEN,FRA,1420564460,1049\n',
'PUD8209OG3,XXQ4064X,JFK,FRA,1420563917,802\n',
'ONL0812DH1,BER7172M,KUL,LAS,1420565167,1848\n',
'YMH6360YP0,ATT7791R,AMS,DEN,1420564394,1001\n']
с этими небольшими выборочными данными. Я получаю дубликаты данных.но с большим я получаю дубликаты и неправильные результаты тоже.Любые мысли о причинах этой проблемы
Большое спасибо за вашу помощь.