给定数组a = [1,1,12,3,5,8,13,21]
,我可以切掉前 3 个元素,例如a[:3]
给[1,1,2]
。我想要的是切掉 vlaue 的元素i
(例如,如果i=8
我想要[1,1,12,3,5,8]
或[1,1,12,3,5]
(我可以使用其中任何一个))。
这有效:
return a[:a.index(i)]
但前提是我给它一个数组中的值。
是否有一种干净的内置方法可以在缺失值的情况下做一些理智的事情?
那是一个list
。
尝试
>>> a = [1,1,2,3,5,8,13,21]
>>> import itertools
>>> for x in itertools.takewhile(lambda val: val != 8, a):
... print x
...
1
1
2
3
5
假设数组已排序,请使用二进制搜索。该功能在bisect
模块中。
from bisect import bisect_right
a[:bisect_right(a, value)]
创建一个生成器,并使用它:
a = [1,1,2,3,5,8,13,21]
def _gen(listing, cutoff):
for i in listing:
if i == cutoff:
return
yield i
new_a = list(_gen(a, 5))
......或者,如果你真的想要一片......
for i, val in enumerate(a):
if val == cutoff:
break
new_a = a[:i]