在python中反转切片

时间:2012-10-29 03:11:14

标签: python list slice

有没有简单的方法来反转python中的列表切片?给我一切除了切片?例如:

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

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

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

6 个答案:

答案 0 :(得分:7)

切片不会像那样换行,但是a[-3:] + a[:3]会给你那个列表。

答案 1 :(得分:5)

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

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

订单与您要求的订单不同,但这对您来说可能并不重要。

答案 2 :(得分: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]

答案 3 :(得分: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]

答案 4 :(得分:1)

订单是否重要?

>>> [j for i,j in enumerate(a) if not 3<=i<7]
[0, 1, 2, 7, 8, 9]

答案 5 :(得分:0)

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

有两个重要的免责声明。

  • 不保留订单
  • 删除重复的项目

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