免責事項:私は質問を誤解し、スライス表記からセットバージョンへの移行を考えていました。これはあなたの質問に実際には答えませんが、残しておく価値があると思いました。 numpy._r
は同じ(または少なくとも非常に似たような)ことをしているようです。あなたのpython 3.5+を使用している場合PEP 3132が与える
まずオフノートがセットリテラルで*unpacking
メソッドを使用するオプションです:
>>> {*range(1,9), *range(11,15,2), *range(45,47), 3467}
{1, 2, 3, 4, 5, 6, 7, 8, 11, 3467, 13, 45, 46}
__getitem__
または__setitem__
がオンに使用されたときにそれ以外の場合は表記11:15:2
のみが使用されていますオブジェクトなので、あなたは自分のセットを生成するオブジェクトを設定する必要があります:
def slice_to_range(slice_obj):
assert isinstance(slice_obj, slice)
assert slice_obj.stop is not None, "cannot have stop of None"
start = slice_obj.start or 0
stop = slice_obj.stop
step = slice_obj.step or 1
return range(start,stop,step)
class Slice_Set_Creator:
def __getitem__(self,item):
my_set = set()
for part in item:
if isinstance(part,slice):
my_set.update(slice_to_range(part))
else:
my_set.add(part)
return my_set
slice_set_creator = Slice_Set_Creator()
desired_set = slice_set_creator[1:9:1,11:15:2,45:47:1,3467]
>>> desired_set
{1, 2, 3, 4, 5, 6, 7, 8, 11, 3467, 13, 45, 46}
スタートを例えばを見て、 http://stackoverflow.com/q/3149440/3001761 – jonrsharpe
少なくとも適切なトラックに私を置いている有用なスレッド。しかし、私が言うことができる限り、それは私に上記のようなストライド情報をもたらさない。 – Kobs
@ Kobyeスライス - >配列からの答えを受け入れました、あなたは他の方法に行きたいと思ったのですか? –