2017-09-16 13 views
-2

2つのリストがあります:最初のリストの1つの小さい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)или(or)АФЛУБИН(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番目のすべての要素の上に行くとanythを印刷していないということです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のために。プレーン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] 
関連する問題