鉴于数组a = [1,1,12,3,5,8,13,21]
,我可以将a[:3]
的前3个元素切换为[1,1,2]
。我想要的是切换到vlaue i
的元素(例如,如果i=8
我想要[1,1,12,3,5,8]
或[1,1,12,3,5]
(我可以使用其中任何一个))。
这有效:
return a[:a.index(i)]
但只有当我给它一个在数组中的值时。
是否有一个干净的内置方法来做这件事,对缺失的值案做了些什么?
答案 0 :(得分:5)
这是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
答案 1 :(得分:0)
假设数组已排序,请使用二进制搜索。该功能位于bisect
module。
from bisect import bisect_right
a[:bisect_right(a, value)]
答案 2 :(得分:0)
创建一个生成器,然后使用:
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]