有什么简单的方法可以在 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 的解决方案
切片不会那样包装,但a[-3:] + a[:3]
会给你那个列表。
如果您愿意销毁列表(或它的副本),您可以删除您不想要的部分:
>>> a = [0,1,2,3,4,5,6,7,8,9]
>>> a[3:7] = []
>>> a
[0, 1, 2, 7, 8, 9]
顺序与您要求的不同,尽管这对您来说可能并不重要。
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]
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]
顺序重要吗?
>>> [j for i,j in enumerate(a) if not 3<=i<7]
[0, 1, 2, 7, 8, 9]
好的,所以这可能不是您想要的,但在您可能想要这样的切片的某些情况下很有用。
有两个重要的免责声明。
list(set(a).difference(a[3:7]))