とスプリットを使用するアレイに分割する任意の等価はありますか?Pythonは配列
a = [1, 3, 4, 6, 8, 5, 3, 4, 5, 8, 4, 3]
separator = [3, 4] (len(separator) can be any)
b = a.split(separator)
b = [[1], [6, 8, 5], [5, 8, 4, 3]]
とスプリットを使用するアレイに分割する任意の等価はありますか?Pythonは配列
a = [1, 3, 4, 6, 8, 5, 3, 4, 5, 8, 4, 3]
separator = [3, 4] (len(separator) can be any)
b = a.split(separator)
b = [[1], [6, 8, 5], [5, 8, 4, 3]]
ありませんが、私たちはそのようなことを行う関数を書くことができ、そしてあなたはそれがインスタンスメソッドである必要があれば、あなたはリストをサブクラス化またはカプセル化できます。
def separate(array,separator):
results = []
a = array[:]
i = 0
while i<=len(a)-len(separator):
if a[i:i+len(separator)]==separator:
results.append(a[:i])
a = a[i+len(separator):]
i = 0
else: i+=1
results.append(a)
return results
あなたは、これはインスタンスメソッドとして働きたいと思った場合は、我々はリストをカプセル化するために、次の行うことができます:
class SplitableList:
def __init__(self,ar): self.ary = ar
def split(self,sep): return separate(self.ary,sep)
# delegate other method calls to self.ary here, for example
def __len__(self): return len(self.ary)
a = SplitableList([1,3,4,6,8,5,3,4,5,8,4,3])
b = a.split([3,4]) # returns desired result
か、我々はそうのようなリストをサブクラス化することができます:
class SplitableList(list):
def split(self,sep): return separate(self,sep)
a = SplitableList([1,3,4,6,8,5,3,4,5,8,4,3])
b = a.split([3,4]) # returns desired result
私はそれが[1、3,4]では機能しないと思う、[[1]、[]]の代わりに[[1]]を返します –
あなたは正しいです、そして、 (文字列分割演算子のように動作するようにする必要がある場合)私はそれに対処するコードを編集しました。 – Matthew
今見栄えます:) –
あなたは、その後、分割を行い、非数値分離器を使用して文字列にリストに参加できます。
>>> s = " {} ".format(" ".join(map(str, a)))
>>> s
' 1 3 4 6 8 5 3 4 5 8 4 3 '
>>> [[int(y) for y in x.split()] for x in s.split(" 3 4 ")]
[[1], [6, 8, 5], [5, 8, 4, 3]]
文字列に2つの余分なスペースがエッジケース(例えばa = [1, 3, 4]
)のアカウントを取ります。
をいいえ、ありません。あなたがあなた自身の
を書いたり、このいずれかを実行する必要があります:
def split(a, sep):
pos = i = 0
while i < len(a):
if a[i:i+len(sep)] == sep:
yield a[pos:i]
pos = i = i+len(sep)
else:
i += 1
yield a[pos:i]
print list(split(a, sep=[3, 4]))
効率化のために(50×)の大きなアレイで、使用することができnp.split方法があります。 難しさは、セパレータを削除するには、次のとおりです。
from pylab import *
a=randint(0,3,10)
separator=arange(2)
ind=arange(len(a)-len(separator)+1) # splitting indexes
for i in range(len(separator)): ind=ind[a[ind]==separator[i]]+1 #select good candidates
cut=dstack((ind-len(separator),ind)).flatten() # begin and end
res=np.split(a,cut)[::2] # delete separators
print(a,cut,res)
ができます:
[0 1 2 0 1 1 2 0 1 1] [0 2 3 5 7 9] [[],[2],[1, 2],[1]]
いいえ、ありません。それはどういう意味ですか?あなたは、あなたの発明された呼び出しに「セパレータ」を含めることさえありません。 – jonrsharpe
それはリストのリストでなければならないのか、あなたは自分の区切りに一致するサブアレイを整理したいですか? – jkalden
あなたは[ 'itertools.groupby'](http://stackoverflow.com/questions/14529523/python-split-for-lists)に見たことがありますか? TigerhawkT3 @ – TigerhawkT3