可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Is there any simple way to invert a list slice in python? Give me everything except a slice? For example:
Given the list a = [0,1,2,3,4,5,6,7,8,9]
I want to be able to extract [7,8,9,0,1,2]
i.e. everything but a[3:7].
Thinking about it logically, I thought that a[-3:3] would give me what I want, but it only returns an empty list.
I am preferring a solution which will work for both python 2 and 3
回答1:
If you're willing to destroy the list (or a copy of it) you can cut out the part you don't want:
>>> a = [0,1,2,3,4,5,6,7,8,9]
>>> a[3:7] = []
>>> a
[0, 1, 2, 7, 8, 9]
The order is not the same as what you asked for, though that might not be important to you.
回答2:
Slices don't wrap like that, but a[-3:] + a[:3]
would give you that list.
回答3:
Itertools is your friend:
itertools.islice(itertools.cycle(a),7,13)
Or generally
itertools.islice(itertools.cycle(a),gapEnd,len(a)-gapLen)
This is a generator so you can get a list with list(...)
or just use it in your loop. As a generator, it does not create extra copies of the list, nor destroy the original, etc.
>>> list(itertools.islice(itertools.cycle(a),7,13))
[7, 8, 9, 0, 1, 2]
回答4:
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]
回答5:
Does the order matter?
>>> [j for i,j in enumerate(a) if not 3<=i<7]
[0, 1, 2, 7, 8, 9]
回答6:
OK, so this may not be exactly what you want, but is useful in some situations where you might want a slice like that.
There are two important disclaimers.
- It doesn't preserve order
- It removes repeated items
list(set(a).difference(a[3:7]))