6

有什么简单的方法可以在 python 中反转列表切片吗?给我除了一片以外的所有东西?例如:

鉴于a = [0,1,2,3,4,5,6,7,8,9]我希望能够提取的列表,[7,8,9,0,1,2]即除 a[3:7] 之外的所有内容。

从逻辑上考虑,我认为 a[-3:3] 会给我想要的东西,但它只返回一个空列表。

我更喜欢适用于 python 2 和 3 的解决方案

4

6 回答 6

7

切片不会那样包装,但a[-3:] + a[:3]会给你那个列表。

于 2012-10-29T03:12:57.327 回答
6

如果您愿意销毁列表(或它的副本),您可以删除您不想要的部分:

>>> a = [0,1,2,3,4,5,6,7,8,9]
>>> a[3:7] = []
>>> a
[0, 1, 2, 7, 8, 9]

顺序与您要求的不同,尽管这对您来说可能并不重要。

于 2012-10-29T03:14:52.147 回答
4

Itertools 是你的朋友:

itertools.islice(itertools.cycle(a),7,13)

或者一般来说

itertools.islice(itertools.cycle(a),gapEnd,len(a)-gapLen)

这是一个生成器,因此您可以获取列表,list(...)也可以在循环中使用它。作为生成器,它不会创建列表的额外副本,也不会破坏原始列表等。

>>> list(itertools.islice(itertools.cycle(a),7,13))
[7, 8, 9, 0, 1, 2]
于 2012-10-29T15:26:10.137 回答
2
  1) b=a[7:10]+a[:3]
     [7, 8, 9, 0, 1, 2]
  2) c=list(set(a).difference([3,4,5,6]))
     [0, 1, 2, 7, 8, 9]


  3) lis=[i for i in a if i<3 or i >6]
     [0, 1, 2, 7, 8, 9]

   4) b=[3,4,5,6]
      c=[i for i in a if i not in b]
于 2012-10-29T15:07:30.420 回答
1

顺序重要吗?

>>> [j for i,j in enumerate(a) if not 3<=i<7]
[0, 1, 2, 7, 8, 9]
于 2012-10-29T03:51:24.430 回答
0

好的,所以这可能不是您想要的,但在您可能想要这样的切片的某些情况下很有用。

有两个重要的免责声明。

  • 它不保持秩序
  • 它删除重复的项目

list(set(a).difference(a[3:7]))

于 2012-10-29T14:44:42.080 回答