我有一个字符串的几个大名单。我需要将所有这些列表分成两个列表,以便仅保留第二个列表。例如:
lst = ['This is a list', 'of strings', 'blahblahblah', 'split_here', 'something else', 'we like cake', 'aardvarks']
我只想抓取'split_here'之后的字符串,以便新列表如下:
new_lst = ['something else', 'we like cake', 'aardvarks']
我尝试过:
new_list = str(lst).split('split_here')[1]
但是,新的输出有一堆的转义字符(“\”符号)。我尝试将其替换为:
.replace('\\', '')
但是那也不起作用。
我想必须有一个简单的方法来做到这一点,我失踪。
答案 0 :(得分:9)
您要查找列表操作,而不是字符串操作。我们只需要找到分隔符字符串出现的位置,并从下一个元素开始进行切片,就像这样:
lst = ['This is a list', 'of strings', 'blahblahblah', 'split_here', 'something else', 'we like cake', 'aardvarks']
new_list = lst[lst.index('split_here')+1:]
上面的假定分离器串是存在于列表中,否则我们会得到ValueError
。如预期的结果:
new_list
=> ['something else', 'we like cake', 'aardvarks']
答案 1 :(得分:2)
使用list#index
可能是最干净的解决方案。
不过,由于您尝试使用字符串和拆分查找解决方案,因此可以使用:
'#'.join(lst).split('split_here#')[-1].split('#')
请注意,只有当您确定#
永远不会出现在字符串中时,该选项才起作用。
以下是控制台中显示的步骤:
>>> lst = ['This is a list', 'of strings', 'blahblahblah', 'split_here', 'something else', 'we like cake', 'aardvarks']
>>> '#'.join(lst)
'This is a list#of strings#blahblahblah#split_here#something else#we like cake#aardvarks'
>>> '#'.join(lst).split('split_here#')
['This is a list#of strings#blahblahblah#', 'something else#we like cake#aardvarks']
>>> '#'.join(lst).split('split_here#')[-1]
'something else#we like cake#aardvarks'
>>> '#'.join(lst).split('split_here#')[-1].split('#')
['something else', 'we like cake', 'aardvarks']
答案 2 :(得分:1)
除了添加到奥斯卡奖之外,您还可以使用itertools.dropwhile()
:
from itertools import dropwhile
lst = ['This is a list', 'of strings', 'blahblahblah', 'split_here', 'something else', 'we like cake', 'aardvarks']
new_list = list(dropwhile(lambda x: x != 'split_here',lst))[1:]