python中的slice(未排序)数组值

时间:2010-06-30 22:50:36

标签: python arrays slice

鉴于数组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)]

但只有当我给它一个在数组中的值时。

是否有一个干净的内置方法来做这件事,对缺失的值案做了些什么?

3 个答案:

答案 0 :(得分:5)

  1. 这是list

  2. 尝试

    >>> 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]