2017-09-16 18 views
-2

두 개의 목록이 있습니다. 첫 번째 목록의 반복 요소 중 작은 1 개의 큰 것이지만 타임 라인에서 행까지 다양한 가격이 있습니다. 작은 목록Python 목록 콜렉션

예 : 가격의 마지막 번호 인 그것에

> lekilist = ['Амертил таб. п/о 10мг №20' 
>   'Амертил таб. п/о 10мг №7' 
>   'Афлубин капли д/пр. внутрь ф/кап. 20мл' 
>   'Афлубин капли д/пр. внутрь ф/кап. 50мл'] 

큰 목록 ","(7.15, 7.99, 8.05, ...) :

ls= [АМЕРТИЛ ТАБЛ.П/О, 10МГ, №20;BIOFARM;ПОЛЬША;0;7.15;0 
    АМЕРТИЛ ТАБЛ.П/О, 10МГ, №20;BIOFARM;ПОЛЬША;0;7.99;00 
    АМЕРТИЛ ТАБЛ.П/О, 10МГ, №20;BIOFARM;ПОЛЬША;0;8.05;0 
    АМЕРТИЛ ТАБЛ.П/О, 10МГ, №7;BIOFARM;ПОЛЬША;0;4.07;0 
    АМЕРТИЛ ТАБЛ.П/О, 10МГ, №7;BIOFARM;ПОЛЬША;0;4.16;0 
    АФЛУБИН ТАБЛ., №24;RICHARD BITTNER;АВСТРИЯ;0;16.81;0 
    АФЛУБИН ТАБЛ., №24;RICHARD BITTNER;АВСТРИЯ;0;16.81;0 
    АФЛУБИН Ф-КАП., КАП.ОР., 20МЛ;RICHARD BITTNER;АВСТРИЯ;0;4.95;0 
    АФЛУБИН Ф-КАП., КАП.ОР., 20МЛ;RICHARD BITTNER;АВСТРИЯ;0;9.96;0] 

작은에서 각 항목에 대한 추가 목록을 작성하는 것이 필요하다 작은 목록 (중요한 요소 : АМЕРТИЛ (name) или (또는) АФЛУБИН (name) или (or) ..., ТАБ. (pills) или КАПС.)의 위치를 ​​식별하는 명확한 이름의 가격 ТАБ.П/О или 캡슐) (코팅 된 정제) Ф-КАП (시럽) ... №20 (정제의 수) или №7 или 20мл (20ml)에 용해

작은 일 :.

import re 

ls=[] 
for i in f: #aligns the name to a small list 
     x = re.findall('[А-ЯТАБЛ\.|ТАБЛ\.П\/О|КАПС\.|СПРЕЙ|СИРОП| Ф\-КАП\.\, КАП\.ОР\.|№\]+[\d]+', i) 
     y = re.sub ('ТАБЛ.', 'ТАБ.', str(x)) 
     z = re.sub('ТАБ.П/О', 'ТАБ. П/О', str(y)) 
     c = re.sub('Ф-КАП., КАП.ОР.', 'КАПЛИ Д/ПР. ВНУТРЬ Ф/КАП.', str(z)) 
     ls.append(c) 


    #Compare items of the first and second list 
    lekilist[x].replace(' ', '') in ls[y].replace(' ', '').replace(',', '') 

# find the price  
    ls[10].split('\'')[-4] 
내가이 목록을 우회 할 것이라고위한 경우, 문제는 그것이 익숙하지 않은 요소가 발생하면, 그것은 i 번째의 모든 요소를 ​​통해 이동 및만한 어떠한 물체를 인쇄하지 않는 동안에서 루프를 구축 할 수

ing. 모든 우연의 일치가 있었는지 여부에 관계없이 전체 목록을 살펴 보는 것이 필요합니다. 희망에 접근하려는 비참한 시도 :

x = 0; 내 문제에 대한 Y = 0

while y <= len(lsPharm): 
     if lekilist[x].replace(' ', '') in lsPharm[y].replace(' ', '').replace(',', ''): 
       o.write(lekilist[x].replace(' ', '') +'\n' + lsPharm[y].replace(' ', '').replace(',', '')+ '\n ------\n') 
       y+=1 
     else: 
       x+=1 
+3

이는 러시아의 사이트로 이동해야합니다 StackOverflow에 대한. Plain StackOverflow를 사용하려면 영어로 질문해야합니다. –

+0

수정했습니다. – bigidigi89

답변

0

솔루션 (하지만 난 DICT를 사용하여 더 나은 생각) : 다른 모듈에

x = 11 
for i in range(len(leki)): sheet.write(x, 18, reintingMed.search(reitingprice[i], i) 
, style2); x += 1 

기능 검색 :

def search(Cena = 5, pozition = 1): 
     '''search items in lsPharm list''' 
     reitinglist = [] 
     for sample in lekilist: 
       samplelist = [] 
       for compared in lsPharm: 
         if sample.replace(' ', '').replace(',', '') in compared.replace(' ', '').replace(',', ''): 
           if compared.split('\'')[-4] != '0': 
             samplelist.append(compared.split('\'')[-4]) 
       for counter, price in enumerate(samplelist): 
         if Cena > float(price): 
           if counter+1 == len(samplelist): 
             reitinglist.append(str(counter+1) + '/' + str(len(samplelist))) 
             break 
         elif Cena< float(samplelist[0]): 
           reitinglist.append(str(counter+1) + '/' + str(len(samplelist))) 
           break 
         else: 
           reitinglist.append(str(counter) + '/' + str(len(samplelist))) 
           break 
     return reitinglist[pozition]