Python列表集合
问题描述:
有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
答
我的问题的解决方案(但我认为更好的使用词典):在另一个模块
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]
这应该被转移到俄罗斯网站为*。简单的*需要英文问题。 –
我做了更正 – bigidigi89