Ami*_*miB -2 python python-2.7
我有一个字符串列表,如下这个:
subject = ['HYB option 1Y10Y STY L op in COP 4 23bps at 2 12bps (hu)',
'HYB option 1Y10Y SOP Linked op in CHY 0 045% at 0 065%',
'HYB option Lip 3M10Y SPX Linked op in BRR 0 00bp at +0 25bp',
'HYB option 2Y15Y NFU Linked op in JPY 0 0498% at 0 0975% (765)',
'HYB option 1Y10Y SxX Lked op in USD 5 75bps at 2 34bps',
'THYB optionSp 9M10Y SX5E Led op in COP 0 065%',
'HYB option 1Y5Y DEE Likd op in EUR 23bp at 1 76bp (ba3)']
Run Code Online (Sandbox Code Playgroud)
我试图找到一种循环这个列表并进行替换和乘法运算的方法.
更具体地说,我如何做一个循环,当我有一个数字后跟bps
或bp
,我做乘以100并替换bps
或bp
由%
.
我已经尝试使用不同的循环方法,但它们都没有工作.发生的事情是,当我进行乘法时,我无法用bp
或者将它们隔离,bps
并且它%
也会将乘法也应用于乘法.
这是一个基于具有回调函数的正则表达式的解决方案:
>>> import re
>>> for s in subject:
... print(re.sub(r"(\d)bps?", lambda m: "%d%%" % (int(m.group(1))*100), s))
...
HYB option 1Y10Y STY L op in COP 4 2300% at 2 1200% (hu)
HYB option 1Y10Y SOP Linked op in CHY 0 045% at 0 065%
HYB option Lip 3M10Y SPX Linked op in BRR 0 0% at +0 2500%
HYB option 2Y15Y NFU Linked op in JPY 0 0498% at 0 0975% (765)
HYB option 1Y10Y SxX Lked op in USD 5 7500% at 2 3400%
THYB optionSp 9M10Y SX5E Led op in COP 0 065%
HYB option 1Y5Y DEE Likd op in EUR 2300% at 1 7600% (ba3)
Run Code Online (Sandbox Code Playgroud)
一个简短的解释:re.sub()
采用正则表达式,只要匹配(\d
=任何数字),就会将其发送到回调函数(此处:执行作业的lambda:转换为int,乘以100,添加百分号).然后匹配由回调函数返回的字符串替换.
所以每次有一个数字后面跟着bp
或bps
(问号是s
可选的),数字就会传递给一个返回一个字符串的函数number*100%
.for循环遍历列表中的字符串并应用于re.sub()
每个元素.
归档时间: |
|
查看次数: |
103 次 |
最近记录: |