1

配列a = [1,1,12,3,5,8,13,21]を指定すると、次のように最初の 3 つの要素を切り取ることができa[:3] ます[1,1,2]。私が望むのは、vlaue の要素まで切り取ることですi(たとえば、ori=8が必要な場合(どちらでも作業できます))。[1,1,12,3,5,8][1,1,12,3,5]

これは機能します:

return a[:a.index(i)]

ただし、配列内の値を指定した場合のみです。

これを行うためのクリーンな組み込みの方法はありますか?

4

3 に答える 3

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
    
于 2010-06-30T23:02:27.087 に答える
0

配列がソートされていると仮定して、二分探索を使用します。関数はbisectモジュールにあります。

from bisect import bisect_right
a[:bisect_right(a, value)]
于 2010-06-30T22:53:29.760 に答える
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]
于 2010-06-30T22:55:26.293 に答える