代码之家  ›  专栏  ›  技术社区  ›  BCS

python中值处的切片(未排序)数组

  •  1
  • BCS  · 技术社区  · 14 年前

    给定数组 a = [1,1,12,3,5,8,13,21] 我可以切掉前三个元素 a[: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 回复  |  直到 14 年前
        1
  •  5
  •   BCS    14 年前
    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
      
        2
  •  0
  •   David Z    14 年前

    假设数组已排序,请使用二进制搜索。函数位于 bisect module .

    from bisect import bisect_right
    a[:bisect_right(a, value)]
    
        3
  •  0
  •   BCS    14 年前

    创建一个生成器,并使用它:

    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]