在C++/C,I可以寫出如下:Python化複合for循環條件
string s;
int window_len = 3;
for (int i = 0, j = window_len; j <= s.length(); i += window_len, j += window_len) {
//do things with s.Slice(i, j)
}
是否有表達的for循環在上述複合體的Python的方式?
在C++/C,I可以寫出如下:Python化複合for循環條件
string s;
int window_len = 3;
for (int i = 0, j = window_len; j <= s.length(); i += window_len, j += window_len) {
//do things with s.Slice(i, j)
}
是否有表達的for循環在上述複合體的Python的方式?
的方法之一 - 大小會截斷其餘字符:
>>> string = 'abcdefghijklm'
>>> size=2
>>> [string[i*size:(i+1)*size] for i in range(len(string) // size)]
['ab', 'cd', 'ef', 'gh', 'ij', 'kl']
或者在for循環中:
for i in range(len(string) // size):
substr = string[i*size:(i+1)*size]
# do stuff with substr
爲什麼,當然是:到使用這種地板分割字符串的長度由「羣」的事實
s = "Hello, world!"
[s[i:i + window_len] for i in range(0, len(s)-window_len+1, window_len)]
# ['Hel', 'lo,', ' wo', 'rld']
同樣的問題 - '!'不應該在那裏。 – jameszhao00
編輯工作之前的解決方案。但是,我更喜歡更直觀的東西 - 這正是我真正喜歡的C++解決方案。 – jameszhao00
應該或不應該? (這是。) – DyZ
我認爲這是以類似的方式得到的概念,並不需要很多o ˚F附加數學:
strides = range(0, len(s)+1, window_len)
for i, j in zip(strides, strides[1:]):
# do something with s[i:j]
你需要使用'len (s)+ 1'作爲你的'範圍'停止。我正準備發佈那個,但你的速度更快:-) – MSeifert
啊,是的,謝謝。 – chthonicdaemon
的可能的複製[?什麼是一個字符串分割成固定長度的數據塊,並在Python與他們合作的最佳方式(http://stackoverflow.com/questions/18854620/whats-the -best-way-split-a-string-into-fixed-length-chunk-and-work-with-the) – DyZ
@DYZ這很相似,但並不完全是我所期待的。 chunkstring(「abc」,2)返回「['ab','c']」。上面的代碼將返回「['ab']」 – jameszhao00
你是對的,代碼段中有錯誤。 – DyZ