我坚持某事,我有一个类似于此的字符串列表:
['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.
答案 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