我在列表中有 20000 个项目,并且想要一种可靠且快速的方法来仅拆分列表中的最后一个括号 ()。有些项目有两个括号,我希望第一个括号保持不变。这是我当前的代码。
output = ['ADLN (ADLN.SI)',
'CN ACCESS INDEX (TR) (SGXCN2.SI)',
'CN ACCESS STB (10%) INDEX (SGXCN7.SI)',
'CN ACCESS STB (5%) INDEX (SGXCN6.SI)',
'FNGUIDE CN ACC (1X) TR IDX (SGXCN15.SI)',
'FNGUIDE CN ACC INV 1X TR KRW IDX (SGXCN13.SI)',
'FNGUIDE CN ACC LEV 2X TR IDX (SGXCN14.SI)',
'FTSE ST All-Share Index (FSTAS.SI)',
'FTSE ST Basic Materials Index (FSTAS1000.SI)',
'FTSE ST Catalist Index (FSTICA.SI)']
mylist =[]
for x in range len(output):
a = ouput[x].split(')')
b = a[0].split('('))
mylist.append(b[0])
mylist.append(b[1])
只有一个括号我才能拆分。如果两个括号,它将不起作用。我想要的输出如下:
'ADLN' ,'ADLN.SI',
'CN ACCESS INDEX (TR)', 'SGXCN2.SI',
'CN ACCESS STB (10%) INDEX ','SGXCN7.SI',
'CN ACCESS STB (5%) INDEX ','SGXCN6.SI',
'FNGUIDE CN ACC (1X) TR IDX ','SGXCN15.SI',
'FNGUIDE CN ACC INV 1X TR KRW IDX','SGXCN13.SI',
'FNGUIDE CN ACC LEV 2X TR IDX','SGXCN14.SI',
'FTSE ST All-Share Index','FSTAS.SI',
'FTSE ST Basic Materials Index','FSTAS1000.SI',
'FTSE ST Catalist Index',FSTICA.SI'
使用循环需要一些时间,有没有更好的方法?
可以使用 str.rpartition
来完成。它分为 3 项列表:左、分隔符和右。并从右开始,因此考虑了最后一个左括号。将左和右(减去最后一个括号)附加到您的列表。
mylist=[]
for i in output:
parts = i.rpartition("(")
mylist.append(parts[0])
mylist.append(parts[2][:-1])
print(mylist)
结果:
['ADLN ', 'ADLN.SI', 'CN ACCESS INDEX (TR) ', 'SGXCN2.SI', 'CN ACCESS STB (10%) INDEX ', 'SGXCN7.SI', 'CN ACCESS STB (5%) INDEX ', 'SGXCN6.SI', 'FNGUIDE CN ACC (1X) TR IDX ', 'SGXCN15.SI', 'FNGUIDE CN ACC INV 1X TR KRW IDX ', 'SGXCN13.SI', 'FNGUIDE CN ACC LEV 2X TR IDX ', 'SGXCN14.SI', 'FTSE ST All-Share Index ', 'FSTAS.SI', 'FTSE ST Basic Materials Index ', 'FSTAS1000.SI', 'FTSE ST Catalist Index ', 'FSTICA.SI']
使用 itertools.chain.from_iterable
在列表理解中做这件事听起来有点困难但可行
import itertools
mylist=list(itertools.chain.from_iterable((i.rpartition("(")[0],i.rpartition("(")[2][:-1]) for i in output))
我是一名优秀的程序员,十分优秀!