2017-01-17 195 views
-1

在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的方式?

+1

的可能的複製[?什麼是一個字符串分割成固定長度的數據塊,並在Python與他們合作的最佳方式(http://stackoverflow.com/questions/18854620/whats-the -best-way-split-a-string-into-fixed-length-chunk-and-work-with-the) – DyZ

+0

@DYZ這很相似,但並不完全是我所期待的。 chunkstring(「abc」,2)返回「['ab','c']」。上面的代碼將返回「['ab']」 – jameszhao00

+0

你是對的,代碼段中有錯誤。 – DyZ

回答

2

的方法之一 - 大小會截斷其餘字符:

>>> 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 
0

爲什麼,當然是:到使用這種地板分割字符串的長度由「羣」的事實

s = "Hello, world!" 
[s[i:i + window_len] for i in range(0, len(s)-window_len+1, window_len)] 
# ['Hel', 'lo,', ' wo', 'rld'] 
+0

同樣的問題 - '!'不應該在那裏。 – jameszhao00

+0

編輯工作之前的解決方案。但是,我更喜歡更直觀的東西 - 這正是我真正喜歡的C++解決方案。 – jameszhao00

+0

應該或不應該? (這是。) – DyZ

1

我認爲這是以類似的方式得到的概念,並不需要很多o ˚F附加數學:

strides = range(0, len(s)+1, window_len) 
for i, j in zip(strides, strides[1:]): 
    # do something with s[i:j] 
+0

你需要使用'len (s)+ 1'作爲你的'範圍'停止。我正準備發佈那個,但你的速度更快:-) – MSeifert

+0

啊,是的,謝謝。 – chthonicdaemon