过滤python中的列表

时间:2014-11-30 09:18:09

标签: python regex

我有一个列表列表,我想在python中指定字符串之后/之前/之间分隔元素。

示例:

指定字符串后:

input1 : [['aaaaa', 'bbbbb', 'cccc', 'specified string', 'ddddd', 'eeeeee', 'ffffff']]

output1 : ddddd, eeeeee, ffffff

在指定字符串之间:

input2 : [['aaaaa', 'bbbbb', 'cccc', 'specified string1', 'ddddd', 'eeeeee', 'ffffff', 'specified string2', 'qqqq', 'wwww', 'sssss']]

output2 : ddddd, eeeeee, ffffff

在指定字符串之前:

input3 : [['aaaaa', 'bbbbb', 'cccc', 'specified string', 'ddddd', 'eeeeee', 'ffffff']]

output3 : aaaaa, bbbbb, cccc

3 个答案:

答案 0 :(得分:4)

您可以通过以下方式访问列表中的列表:

lst = list_of_list[0]

现在您要搜索“指定字符串”。你可以:

lst.index('specified string') 

将返回字符串出现的索引。最后,您可以使用切片来获取所需的子列表。

尝试这样做,如果您遇到问题,请在此处发布,我们会帮助您。

答案 1 :(得分:2)

您可以使用itertool.takewhileitertool.dropwhile功能。我认为它可能比在性能方面使用index要好一些(至少如果你需要获得2个字符串之间的列表):

>>> from itertools import dropwhile, takewhile
>>> input1 = [['aaaaa', 'bbbbb', 'cccc', 'specified string', 'ddddd', 'eeeeee', 'ffffff']]
>>> input2 = [['aaaaa', 'bbbbb', 'cccc', 'specified string1', 'ddddd', 'eeeeee', 'ffffff', 'specified string2', 'qqqq', 'wwww', 'sssss']]
>>> input3 = [['aaaaa', 'bbbbb', 'cccc', 'specified string', 'ddddd', 'eeeeee', 'ffffff']]
>>> f = lambda x: x <> 'specified string'
>>> f1 = lambda x: x <> 'specified string1'
>>> f2 = lambda x: x <> 'specified string2'
>>>
>>> list(dropwhile(f, input1[0]))[1:]
['ddddd', 'eeeeee', 'ffffff']
>>> list(takewhile(f2, dropwhile(f1, input2[0])))[1:]
['ddddd', 'eeeeee', 'ffffff']
>>> list(takewhile(f, input3[0]))
['aaaaa', 'bbbbb', 'cccc']

答案 2 :(得分:1)

您可以轻松获取specified string的索引:

boundaries = [index for index, item in input.items() if item == specified_string]

然后您可以轻松提取所需的部件:

first = input[:boundaries[0]-1] # until the first occurrence
middle = input[boundaries[0]+1:boundaries[1]-1] # between the first and the second
last = input[boundaries[0]+1:] # from the last to the end