Pythonでリストスライスを反転する簡単な方法はありますか? スライス以外全部くれますか?例えば:
リストを考えると、[3:7] 以外のすべてa = [0,1,2,3,4,5,6,7,8,9]
を抽出できるようにしたいと考えています。[7,8,9,0,1,2]
論理的に考えると、 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]
OK、これはまさにあなたが望むものではないかもしれませんが、そのようなスライスが必要な場合には便利です。
2 つの重要な免責事項があります。
list(set(a).difference(a[3:7]))