O.r*_*rka 4 python string loops window sliding
我正在尝试在Python中生成滑动窗口函数.我想出了如何做到这一点但并非所有内部功能.itertools,yield和iter()对我来说都是全新的.
我想输入
a='abcdefg'
b=window(a,3)
print b
['abc','bcd','cde','def','efg']
Run Code Online (Sandbox Code Playgroud)
我得到它的方式是
def window(fseq, window_size=5):
import itertools
tentative=[]
final=[]
iteration=iter(fseq)
value=tuple(itertools.islice(iteration,window_size))
if len(value) == window_size:
yield value
for element in iteration:
value = value[1:] + (element,)
yield value
a='abcdefg'
result=window(a)
list1=[]
for k in result:
list1.append(k)
list2=[]
for j in list1:
tentative=''.join(j)
list2.append(tentative)
print list2
Run Code Online (Sandbox Code Playgroud)
基本上我很困惑的是如何使用函数内部函数的最终值?
这是我的函数代码
def window(fseq, window_size=5):
import itertools
tentative=[]
final=[]
iteration=iter(fseq)
value=tuple(itertools.islice(iteration,window_size))
if len(value) == window_size:
yield value
for element in iteration:
value = value[1:] + (element,)
yield value
for k in value:
tentative.append(k)
for j in tentative:
tentative_string=''.join(j)
final.append(tentative_string)
return final
seq='abcdefg'
uence=window(seq)
print uence
Run Code Online (Sandbox Code Playgroud)
我希望它返回加入列表但是当我按下运行它时,它会显示"你的程序中有一个错误* '返回'与发生器内的参数"
我真的很困惑...
Céd*_*ien 12
你的意思是你想这样做?:
a='abcdefg'
b = [a[i:i+3] for i in xrange(len(a)-2)]
print b
['abc', 'bcd', 'cde', 'def', 'efg']
Run Code Online (Sandbox Code Playgroud)
您的生成器可能要短得多:
def window(fseq, window_size=5):
for i in xrange(len(fseq) - window_size + 1):
yield fseq[i:i+window_size]
for seq in window('abcdefghij', 3):
print seq
abc
bcd
cde
def
efg
fgh
ghi
hij
Run Code Online (Sandbox Code Playgroud)