Diziler için bölünecek eşdeğer var mı?Python dizilerle bölme kullanımı
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]]
Diziler için bölünecek eşdeğer var mı?Python dizilerle bölme kullanımı
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]]
Hayır, ancak böyle bir şeyi yapmak için bir işlev yazabiliriz ve sonra bir örnek yöntemi olarak ihtiyacınız varsa listeyi alt sınıflara ayırabilir veya kapsülleyebilirsiniz. Eğer örnek yöntemi olarak çalışmak için bu isteseydim
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
, listeyi saklanması için aşağıdaki yapabilirdi:
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
ya da biz şöyle listesini alt sınıf olabilir:
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] için işe yaramadığını düşünüyorum, [[1], []] yerine [[1], []] yerine dönecektir –
Haklısınız ve boş listeden emin değildim meydana gelmeli ya da olmamalıdır (eğer arzu dizge operatörü gibi davranacaksa). Bunu çözmek için kodu düzenledim. – Matthew
Şimdi iyi görünüyor :) –
Bir sayısal olmayan ayırıcı kullanarak bir dizeye liste katılabileceğini, sonra bölünmüş yapın: dizede
>>> 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 fazladan boşluklar uç örnekleri göz önünde (örn a = [1, 3, 4]
) .
Hayır yok. Kendi
yazmak zorunda yoksa bu alacak: Büyük diziler üzerinde verimlilik (50 x) için
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]))
, kullanılabilecek bir np.split yöntem yoktur.
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)
verir: zorluk ayırıcısını silmektir
[0 1 2 0 1 1 2 0 1 1] [0 2 3 5 7 9] [[],[2],[1, 2],[1]]
Hayır, yok; bu nasıl mantıklı olurdu? Bulunduğunuz çağrıda 'separatör 'bile dahil değilsiniz. – jonrsharpe
listelerin bir listesi mi olmalı yoksa sadece ayırıcınızla eşleşen alt dizileri mi ayırmak istiyorsunuz? – jkalden
['itertools.groupby'] 'ye (http://stackoverflow.com/questions/14529523/python-split-for-lists) baktınız mı? – TigerhawkT3