在字符串列表中首次出现X之前删除所有内容

时间:2018-05-09 00:51:09

标签: python list

我坚持某事,我有一个类似于此的字符串列表:

['one', 'two', 'asdf', 'asdf', 'stuff', 'other', 'asdf', 'other stuff', 'asdf','asdf']

这个列表不断变化,但一个常数就是' asdf'将始终存在,第一个asdf之前的数据以及之后的数据会发生变化。

我的问题是我需要在第一个asdf之前删除列表中的所有字符串(在示例中它将是一个和两个) 或算上第一个asdf之后的一切。

我正在使用:

data2 = normalize_line_endings(data)
data3 = data2.split('\n')
data3 = list(map(lambda x: str(x) if x else 'asdf' , data3))
print(data3)
target_ibdex = data3.rindex('asdf')
target_ibdex2 = target_ibdex
print(data3[:target_ibdex - target_ibdex2])

然而,当它运行时,它使用最后一个asdf,所以它只删除整个字符串。

我需要:

a=['one', 'two', 'asdf', 'asdf', 'stuff', 'other', 'asdf', 'other stuff', 'asdf','asdf']
b = code to delete everything before FIRST asdf
len(b)
where b's value is now 8 instead of 10. since one,two got removed.

2 个答案:

答案 0 :(得分:1)

您可以使用list.index()之类的:

代码:

b = a[a.index('asdf'):]

测试代码:

a = ['one', 'two', 'asdf', 'asdf', 'stuff', 'other', 'asdf', 'other stuff',
     'asdf', 'asdf']

b = a[a.index('asdf'):]
print(b)

结果:

['asdf', 'asdf', 'stuff', 'other', 'asdf', 'other stuff', 'asdf', 'asdf']

答案 1 :(得分:1)

如果您确实需要以下元素后,这是itertools.dropwhile的完美用例:

In [1]: a = ['one', 'two', 'asdf', 'asdf', 'stuff', 'other', 'asdf', 'other stuff', 'asdf','asdf']

In [2]: import itertools

In [3]: list(itertools.dropwhile(lambda x: x != 'asdf', a))
Out[3]: ['asdf', 'asdf', 'stuff', 'other', 'asdf', 'other stuff', 'asdf', 'asdf']

当然,如果你只需要后面的元素数,你可以简单地做:

In [4]: len(a) - a.index('asdf')
Out[4]: 8