2012-07-14 72 views
0

舉例來說,我有一個這樣的名單:我可以將列表更改爲字符串,修改它,並將其更改爲列表?

lista = ['abc', 'alpha', 'bravo', 'charlie'] 

然後我改變這種轉換爲字符串,然後修改它:

lista = str(lista) 
re.sub('a','b', lista) 

的話,我會得到一個「字符串」,如:

lista = ['bbc','blphb','brbvo','chbrlie'] 

我想這是一個列表了。

有什麼建議嗎?或者我可以修改列表中的東西嗎?簡單的方法將是最好的。

編輯: 我正在使用beutifulsoup的findall製作清單。代碼是這樣的:

desclist = soup.findAll('description') 
desclist[:] = (x.replace(r'.+', ' ') for x in desclist) 
print desclist 

我試圖改變'。'或'。'轉換爲'' ,但它表示非類型對象不可調用。

+1

建議:不要使用像替換字母列表的字符串表示... – jamylak 2012-07-14 10:42:42

回答

6

沒有必要將列表轉換爲字符串。也不需要使用正則表達式來替換簡單的字符串。只需在列表中的每個項目進行更換,並將它們存儲在一個新的列表:

lista = [x.replace('a', 'b') for x in lista] 

你也可以修改列表就地:

lista[:] = (x.replace('a', 'b') for x in lista) 
+0

我計時這一點,並使用一臺發電機在片assignmen哈克方法t比列表比較慢,你有任何情況下會更快嗎? – jamylak 2012-07-14 10:51:25

+0

謝謝!我不知道它可能如此簡單!你幫了我很多:) – 2012-07-14 10:53:29

+0

呃哦..我有一個錯誤,說'非類型對象不可調用..'我應該怎麼做:( – 2012-07-14 11:07:06

0

使用list comprehension行動每個成員您的列表:

In [1]: import re 

In [2]: lista = ['abc', 'alpha', 'bravo', 'charlie'] 

In [3]: lista = [re.sub('a','b',x) for x in lista] 

In [4]: lista 
Out[4]: ['bbc', 'blphb', 'brbvo', 'chbrlie'] 
+0

它說預期的字符串或緩衝區..對不起,我是新編程.. – 2012-07-14 11:23:03

+0

是你確定嗎?我已經改變了答案以顯示所有的步驟(我已經改變了可以與第一號混淆的字母,以防出現問題)。 – 2012-07-14 11:28:39

+0

它適用於你的例子,但doensn't不工作我的.. :( desclist = [re.sub('a','b',x)for x in desclist] 文件「/usr/lib/python2.7/re.py」,行151,in sub return _compile(pa ttern,flags).sub(repl,string,count) TypeError:期望的字符串或緩衝區 – 2012-07-14 11:38:33