找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4320|回复: 3

[代码与实例] 关于计算字符串交集与并集问题

3

主题

5

帖子

5

积分

贫民

积分
5
桔梗花的幸福 发表于 2018-1-5 10:37:03 | 显示全部楼层 |阅读模式
‘A-10-B-A-02’(metformin) 二甲双胍
‘A-10-B-F-01’ (acarbose) 阿卡波糖
对于上述的字符串,用‘-’分开表示五个等级。如何实现这两个公式的计算,最后想要达到 图片3.png 的结果

文件格式为
HydrochlorothiazideC03AA03
AtropineA03BA01
fosphenytoinN03AB05
alvimopanA06AH02
RabeprazoleA02BC04
Vitamin B12B03BA
Sodium OxybateN01AX11
BusulfanL01AB01
liposomal amphotericin BA01AB04
trametinibL01XE25
exemestaneL02BG06
telaprevirJ05AE11
AcitretinD05BB02
NaloxoneV03AB15


回复

使用道具 举报

2

主题

219

帖子

219

积分

版主

Rank: 7Rank: 7Rank: 7

积分
219

热心会员默默耕耘优秀版主

剑心无痕 发表于 2018-1-5 16:46:29 | 显示全部楼层
本帖最后由 剑心无痕 于 2018-1-5 16:49 编辑

1、先说分开,用正则表达式
  1. import re
  2. a = 'C03AA03'
  3. r = re.match('(\w)(\d+)(\w)(\w)(\d+)?',a).groups()  # ('C', '03', 'A', 'A', '03')结果
复制代码

2、再说计算,把你的参数存到一个dict里
例如参数1的 p1 = {'A':10, 'C':5} # A是10分,C是5分 (p可以是list[dict]方便调用)
然后对两个分好的r1和r2
  1. sum([p[i][r1[i]] / p[i][r2[i]] for i in range(5)])/5
复制代码



ps:上面有四个参数的,所以别忘记对空值处理,例如p[4] = {None: 10, "01":1}


回复 支持 反对

使用道具 举报

3

主题

5

帖子

5

积分

贫民

积分
5
桔梗花的幸福  楼主| 发表于 2018-1-6 15:10:57 | 显示全部楼层
剑心无痕 发表于 2018-1-5 16:46
1、先说分开,用正则表达式

2、再说计算,把你的参数存到一个dict里

您说的正则表达式特别的好用,万分感谢!我是个新手小菜鸟但是您说的第二个计算问题我们不是很懂,自己也尝试着做了一下,还没有头绪,能否具体解答一下呢?万分感谢!(PS:当时发了两个帖子,这个里面有两个公式没有显示出来
回复 支持 反对

使用道具 举报

3

主题

5

帖子

5

积分

贫民

积分
5
桔梗花的幸福  楼主| 发表于 2018-1-6 15:15:45 | 显示全部楼层
桔梗花的幸福 发表于 2018-1-6 15:10
您说的正则表达式特别的好用,万分感谢!我是个新手小菜鸟但是您说的第二个计算问题我们不是很懂,自己也 ...

http://bbs.pythontab.com/thread-5243-1-1.html(在这个帖子上,电脑出现一点问题,无法传图片望见谅)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表