6

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 の両方で機能するソリューションを好む

4

6 に答える 6

7

スライスはそのように折り返されませんが、a[-3:] + a[:3]そのリストが表示されます。

于 2012-10-29T03:12:57.327 に答える
6

リスト(またはリストのコピー)を破棄する場合は、不要な部分を切り取ることができます。

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

順序はあなたが要求したものと同じではありませんが、それはあなたにとって重要ではないかもしれません。

于 2012-10-29T03:14:52.147 に答える
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]
于 2012-10-29T15:26:10.137 に答える
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]
于 2012-10-29T15:07:30.420 に答える
1

順序は重要ですか?

>>> [j for i,j in enumerate(a) if not 3<=i<7]
[0, 1, 2, 7, 8, 9]
于 2012-10-29T03:51:24.430 に答える
0

OK、これはまさにあなたが望むものではないかもしれませんが、そのようなスライスが必要な場合には便利です。

2 つの重要な免責事項があります。

  • 秩序を保てない
  • 繰り返し項目を削除します

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

于 2012-10-29T14:44:42.080 に答える