2017-09-16 98 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] 

这是必要的,有小到为每个项目附加列表(名称)或(或)АФЛУБИН(名称)или(或)...,ТАБ。(丸剂)илиКАПС。((或)АФЛУБИН胶囊)илиТАБ.П/О(包衣片)Ф-КАП(糖浆)...,№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。简单的StackOverflow需要英文问题。 –

+0

我做了更正 – bigidigi89

回答

0

我的问题的解决方案(但我认为更好的使用词典):在另一个模块

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]