索引所有 \\* 除了 \\* python 中的一项

新手上路,请多包涵

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

  • mylist[3] 将返回位置 3 的项目

  • milist[~3] 将返回除 3 之外的整个列表

原文由 choldgraf 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 246
2 个回答

对于 list ,您可以使用 list comp。例如,要制作 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])

一般来说,这比上面列出的列表理解要快得多。

原文由 tom10 发布,翻译遵循 CC BY-SA 3.0 许可协议

我发现的最简单的方法是:

 mylist[:x] + mylist[x+1:]

这将生成您的 mylist 没有索引处的元素 x

例子

mylist = [0, 1, 2, 3, 4, 5]
x = 3
mylist[:x] + mylist[x+1:]

结果产生

mylist = [0, 1, 2, 4, 5]

原文由 Andre Soares 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题