2011-04-19 29 views
11

我正在使用Python爲我工作的實驗室編程。我怎樣才能切出給定字符串中的每3個字符並將其附加到列表中?如何每3個索引切分一個字符串?

即XXXxxxXXXxxxXXXxxxXXXxxxXXX(其中X或X是任何給定的字母)

string = 'XXXxxxXXXxxxXXXxxxXXXxxxXXX' 
mylist = [] 

for x in string: 
    string[?:?:?] 
    mylist.append(string) 

我想要列表看起來像這樣: 'XXX', 'XXX', 'XXX', 'XXX',」 XXX'.... etc]

任何想法?

+2

ah,codons =))) – ninjagecko 2011-04-19 04:08:37

+3

這非常類似於[在塊中的列表中迭代](http://stackoverflow.com/questions/434287/what-is-the-most-pythonic-way-to - 在列表中細分) - 檢查那裏的答案以獲得一些出色的方法。 – 2011-04-19 04:20:46

回答

19

總之,你不能。

在更長的時間,你需要編寫自己的功能,可能是:

def split(str, num): 
    return [ str[start:start+num] for start in range(0, len(str), num) ] 

例如:

 
>>> split("xxxXXX", 3) 
['xxx', 'XXX'] 
>>> split("xxxXXXxx", 3) 
['xxx', 'XXX', 'xx'] 
4

據我所知,在方法沒有內置,讓你爲每個x索引分塊。然而,這應該工作:

str = "stringStringStringString" 

def chunk_str(str, chunk_size): 
    return [str[i:i+chunk_size] for i in range(0, len(str), chunk_size)] 

chunk_str(str,3) 

生產:分裂列表之間

['str', 'ing', 'Str', 'ing', 'Str', 'ing', 'Str', 'ing'] 
+0

甚至沒有.split()方法? – Francis 2011-04-19 04:28:10

+0

不是 - '.split'方法僅用於基於字符的分割。 – 2011-04-19 04:32:00

+0

這是迄今爲止我找到的最佳解決方案。做得好! – 2017-01-24 20:06:47

7

一個差成3塊,串入的3塊是重模塊與字符串,而不是名單。

如果性能是重要的(即要拆分數千字符串),你應該測試各種答案在你的應用

>>> import re 
>>> re.findall('...','XXXxxxXXXxxxXXXxxxXXXxxxXXX') 
['XXX', 'xxx', 'XXX', 'xxx', 'XXX', 'xxx', 'XXX', 'xxx', 'XXX'] 

>>> chunksize=3 
>>> re.findall('.{%s}'%chunksize,'XXXxxxXXXxxxXXXxxxXXXxxxXXX') 
['XXX', 'xxx', 'XXX', 'xxx', 'XXX', 'xxx', 'XXX', 'xxx', 'XXX'] 

這工作,因爲.意味着「匹配任何字符」正則表達式中如何比較。
.{3}意思是 「匹配的3個字符」,依此類推

1

複製從How do you split a list into evenly sized chunks in Python?答案自2008年11月:

從Python文檔

直接(食譜itertools):

from itertools import izip, chain, repeat 

def grouper(n, iterable, padvalue=None): 
    "grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')" 
    return izip(*[chain(iterable, repeat(padvalue, n-1))]*n) 

的如JFSebastian所示:

from itertools import izip_longest 

def grouper(n, iterable, padvalue=None): 
    "grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')" 
    return izip_longest(*[iter(iterable)]*n, fillvalue=padvalue) 

我猜guido的ti我機器工作 - 工作 - 將工作 - 將工作 - 再次工作。

相關問題