索引所有*除外* python中的一项

发布于 2021-01-29 19:12:47

有没有一种简单的方法来索引列表(或数组,或其他)中 特定索引 之外的 所有元素?例如,

  • mylist[3] 将把该物品退回位置3

  • milist[~3] 将返回整个列表,除了3

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    对于 列表 ,您可以使用列表组合。例如,要制作不含第3个元素b的副本a

    a = range(10)[::-1]                       # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    b = [x for i,x in enumerate(a) if i!=3]   # [9, 8, 7, 5, 4, 3, 2, 1, 0]
    

    这是非常通用的方法,可以与所有可迭代对象(包括numpy数组)一起使用。如果要更换[]()b将是一个迭代器,而非列表。

    或者,您可以通过以下方式就地完成此操作pop

    a = range(10)[::-1]     # a = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    a.pop(3)                # a = [9, 8, 7, 5, 4, 3, 2, 1, 0]
    

    numpy中, 您可以使用布尔索引进行此操作:

    a = np.arange(9, -1, -1)     # a = array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
    b = a[np.arange(len(a))!=3]  # b = array([9, 8, 7, 5, 4, 3, 2, 1, 0])
    

    通常,这比上面列出的列表理解要快得多。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看