在字符串中特定字符序列之后选择字符的Pythonic方法
我有一个字符串列表,比如在字符串中特定字符序列之后选择字符的Pythonic方法,python,list,Python,List,我有一个字符串列表,比如 lst = ['foo000bar111', 'foo000bar1112', 'foo000bar1113'] 我想从每个字符串中提取最后的数字 nums = ['111', '1112', '1113'] 前面的字符串中还有其他我不关心的数字(本例中为000)。没有空格,所以我不能lst.split(),我相信没有空格做类似的事情是很困难的。数字的长度不同,所以我不能只做str[-3:]。值得一提的是,我关心的数字前面的字符在每个字符串中都是相同的,数字在字符串
lst = ['foo000bar111', 'foo000bar1112', 'foo000bar1113']
我想从每个字符串中提取最后的数字
nums = ['111', '1112', '1113']
前面的字符串中还有其他我不关心的数字(本例中为000
)。没有空格,所以我不能lst.split()
,我相信没有空格做类似的事情是很困难的。数字的长度不同,所以我不能只做str[-3:]
。值得一提的是,我关心的数字前面的字符在每个字符串中都是相同的,数字在字符串的末尾
我正在寻找一种方式来说‘好吧,读到你找到了
bar
,然后告诉我字符串的其余部分是什么。’我想到的最好的方法是[str[(str.index('bar')+3):]对于lst中的str]
,这很有效,但我怀疑这是最适合python的方法。你的方法是准确的。您也可以尝试使用
您也可以尝试rindex
>>> [i[i.rindex('r')+1:] for i in lst]
['111', '1112', '1113']
你的方法很准确。您也可以尝试使用 您也可以尝试
rindex
>>> [i[i.rindex('r')+1:] for i in lst]
['111', '1112', '1113']
您自己的解决方案工作得很好,但我认为主要的问题是您必须对正在使用的搜索字符串的长度进行硬编码。可以使用如下临时变量解决此问题:
tag = 'bar'
[s[(s.index(tag)+len(tag)):] for s in lst]
另一种方法是使用:
这总是在最后一次出现
条时分割,即使它出现了不止一次。您自己的解决方案工作得很好,但我认为主要的问题是您必须对正在使用的搜索字符串的长度进行硬编码。可以使用如下临时变量解决此问题:
tag = 'bar'
[s[(s.index(tag)+len(tag)):] for s in lst]
另一种方法是使用:
这总是在最后一次出现条时分裂,即使它出现了不止一次。您的解决方案一点也不差,但您可以通过以下两种方式改进它:
使用rindex()
代替索引;如果bar
在一个字符串中出现两次(或更多),则需要查找最后一个实例
或者您可以使用rsplit()
:
编辑:@Bas在第二个解决方案中领先我几秒钟!:-) 您的解决方案一点也不差,但您可以通过以下两种方式加以改进:
使用rindex()
代替索引;如果bar
在一个字符串中出现两次(或更多),则需要查找最后一个实例
或者您可以使用rsplit()
:
编辑:@Bas在第二个解决方案中领先我几秒钟!:-) 你已经做对了。你已经做对了。谢谢你的建议。实际上,我还需要做一些额外的工作,因为我需要删除一个文件扩展名,而rsplit工作得很好。这真是个好主意,我投了你一票。但是,请将变量从str
更改为第一个列表中的其他变量,因为str
是内置变量名。:)@巴加夫罗,谢谢,修好了。我从问题中复制了代码,没有看太多,我尽量不在自己的代码中这样做…谢谢你的建议。实际上,我还需要做一些额外的工作,因为我需要删除一个文件扩展名,而rsplit工作得很好。这真是个好主意,我投了你一票。但是,请将变量从str
更改为第一个列表中的其他变量,因为str
是内置变量名。:)@巴加夫罗,谢谢,修好了。我从问题中复制了代码,没有看太多,我尽量不在自己的代码中这样做。。。
[ s.rsplit("bar", 1)[1] for s in lst ]