假設我們有一個這樣的句子:"ABCDEFG"
,以及一個標記列表:[0,0,1,0,0,0,1]
。我打算做的是通過使用標記列表將源字符串拆分爲段:如果一個字符在源字符串中具有索引i
,並且通過使用該索引,我們可以在標記列表中獲得1
,那麼這個字符是一個詞的結尾。如何通過python中的標記列表來分割字符串?
所以源字符串可以被分成['ABC', 'DEFG']
如何在Python實現這一目標?我的意思是,不像使用臨時緩衝區那樣簡單。
假設我們有一個這樣的句子:"ABCDEFG"
,以及一個標記列表:[0,0,1,0,0,0,1]
。我打算做的是通過使用標記列表將源字符串拆分爲段:如果一個字符在源字符串中具有索引i
,並且通過使用該索引,我們可以在標記列表中獲得1
,那麼這個字符是一個詞的結尾。如何通過python中的標記列表來分割字符串?
所以源字符串可以被分成['ABC', 'DEFG']
如何在Python實現這一目標?我的意思是,不像使用臨時緩衝區那樣簡單。
我們可以用簡單的for
循環來達致這 -
>>> s = "ABCDEFG"
>>> l = [0,0,1,0,0,0,1]
>>>
>>> endlist = []
>>> tsh = ''
>>> for i, ch in enumerate(s):
... tsh += ch
... if l[i] == 1:
... endlist.append(tsh)
... tsh = ''
...
>>> endlist
['ABC', 'DEFG']
一個簡單的方法是:
temp = "ABCDEFG"
t = [0,0,1,0,0,0,1]
f_i, e_i = 0,0
for index,val in enumerate(t):
if val:
e_i = index +1
print temp[f_i: e_i ] #Here you can store these as you wish
f_i = e_i
.index
可能找到1
S上的最快的方法。也使您能夠將源字符串直接
s = "ABCDEFG"
L = [0,0,1,0,0,0,1]
pos = 0
res = []
while True:
try:
idx = L.index(1, pos) + 1
except ValueError:
break
res.append(s[pos: idx])
pos = idx
print(res)
我真的很喜歡你的想法!然而,有沒有關於「索引是最快爲什麼找到1」的參考? – VELVETDETH
一個簡單的回答:
l = [0,0,1,0,0,0,1]
s = 'ABCDEFG'
indices = [i for i, x in enumerate(l) if x == 1]
t = 0
a = []
for i in indices:
a.append(s[t:i+1])
t = i+1
print(a)
一個主題的另一個變化。
marks = [0,0,1,0,0,0,1]
sentence = 'ABCDEFG'
output = []
last_index = 0
for index, mark in enumerate(marks):
if mark:
output.append(sentence[last_index:index+1])
last_index = index+1
print(output)
它根本不清楚你想達到什麼目的。 –
這個問題更適合發佈在http://codegolf.stackexchange.com/ 這是什麼意思的'別的'? :-) –
在Python'itertools'文檔中使用'groupby'方法:https://docs.python.org/3/library/itertools.html#itertools.groupby – Sam