在Python中按值切片(无序)数组
给定一个数组 a = [1,1,12,3,5,8,13,21]
,我可以用 a[:3]
来切掉前面三个元素,这样就得到了 [1,1,12]
。我想要的是切掉一直到值为 i
的元素(比如说如果 i=8
,我想要 [1,1,12,3,5,8]
或者 [1,1,12,3,5]
,这两种都可以)。
这样做是可以的:
return a[:a.index(i)]
但前提是我给的值必须在数组里。
有没有什么简单的方法可以做到这一点,并且在值缺失的情况下也能正常工作呢?
3 个回答
0
假设这个数组是排好序的,可以使用二分查找。这个功能在bisect
模块里。
from bisect import bisect_right
a[:bisect_right(a, value)]
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]
5
那是一个
列表
。试试这个:
>>> 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