在Python列表中执行复杂循环

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)

我试图找到一种循环这个列表并进行替换和乘法运算的方法.

更具体地说,我如何做一个循环,当我有一个数字后跟bpsbp,我做乘以100并替换bpsbp%.

我已经尝试使用不同的循环方法,但它们都没有工作.发生的事情是,当我进行乘法时,我无法用bp或者将它们隔离,bps并且它%也会将乘法也应用于乘法.

Pav*_*vel 6

这是一个基于具有回调函数的正则表达式的解决方案:

>>> 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,添加百分号).然后匹配由回调函数返回的字符串替换.

所以每次有一个数字后面跟着bpbps(问号是s可选的),数字就会传递给一个返回一个字符串的函数number*100%.for循环遍历列表中的字符串并应用于re.sub()每个元素.