有没有简单的方法来反转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的解决方案
答案 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]))