在Python中按值切片(无序)数组

1 投票
3 回答
3536 浏览
提问于 2025-04-16 00:38

给定一个数组 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
  1. 那是一个 列表

  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
    

撰写回答