我有一个字符串列表,例如:
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)']
我试图找到一种循环遍历此列表并进行替换和乘法运算的方法。
更具体地说,我如何进行循环,当我有一个数字后跟bps
或bp
时,我将乘以100并替换bps
或{{1 } bp
。
我已经尝试过使用不同的循环方法,但它们都没有工作。发生的事情是,当我进行乘法时,我不能用%
或bp
隔离它,并且它也会将乘法应用于bps
的乘法。
答案 0 :(得分:6)
以下是基于regular expressions with a callback function的解决方案:
>>> 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)
简要说明:re.sub()
采用正则表达式,只要匹配(\d
=任意数字),就会将其发送到回调函数(此处:执行作业的lambda:convert到int,乘以100,加上百分号)。然后匹配由回调函数返回的字符串替换。
因此,每次有bp
或bps
后面的数字(问号使s
可选)时,该数字将传递给返回字符串{{1}的函数}。 for循环遍历列表中的字符串,并将number*100%
应用于每个元素。