2016-01-22 96 views
-1

什麼是替換列表中每個字符串的最佳方法?如何將字符串替換爲列表中的其他字符串(python)

例如,如果我有一個列表:

a = ['123.txt', '1234.txt', '654.txt'] 

,我想有:

a = ['123', '1234', '654'] 
+0

目前還不清楚您是否在修改字符串或重複創建「列表」時遇到問題。從技術上講,「只要做'a = ['123','1234','654']'」就可以準確回答這個問題。你正在讓回答者進行「心理調試」(又名「猜測」)。 – TigerhawkT3

回答

2

使用列表理解如下:

a = ['123.txt', '1234.txt', '654.txt'] 
answer = [item.replace('.txt', '') for item in a] 
print(answer) 

輸出

['123', '1234', '654'] 
2

假設所有字符串都以'.txt'結尾,只需關閉最後四個字符。

>>> a = ['123.txt', '1234.txt', '654.txt'] 
>>> a = [x[:-4] for x in a] 
>>> a 
['123', '1234', '654'] 

,如果你有一些奇怪的名字,如「some.txtfile.txt」

+1

@ user3612491沒問題。作爲一個暗示,我想你可能會更清楚地問這個問題。例如,如果你想替換任何字符串,我的答案不適用。目前還不清楚我提到的文件名應該如何處理,例如'some.txtfile.txt'。在某些時候,我們不得不使用正則表達式,但是您的問題似乎更具體,而問題的標題非常寬泛。 – timgeb

1

您可以用.分隔符分開你並獲得第一個項目這也將工作:

In [486]: [x.split('.')[0] for x in a] 
Out[486]: ['123', '1234', '654'] 
4

假設示例輸入類似於您實際擁有的內容,請使用os.path.splitext()刪除文件擴展名:

>>> import os 
>>> a = ['123.txt', '1234.txt', '654.txt'] 
>>> [os.path.splitext(item)[0] for item in a] 
['123', '1234', '654'] 
1

另一種方式來做到這一點:

a = [x[: -len("txt")-1] for x in a] 
1

什麼是替換列表中每個字符串的最好方法?

這完全取決於你如何定義'最好'。我舉個例子,像正則表達式:

import re 
a = ['123.txt', '1234.txt', '654.txt'] 
answer = [re.sub('^(\w+)\..*', '\g<1>', item) for item in a] 
#print(answer) 
#['123', '1234', '654'] 

根據字符串的內容,你可以對其進行調整:

  • \w+ VS [0-9]+只有數字
  • \..* VS \.txt如果所有字符串以.txt結尾
0
data.colname = [item.replace('anythingtoreplace', 'desiredoutput') for item in data.colname] 

請注意,'data'是數據框,'colname'是您可能在該數據框中使用的列名。即使是空格,如果你想從字符串或數字中刪除它們。這對我來說非常有用。此外,這不會更改列的數據類型,因此如果需要,您可能必須單獨執行此操作。

相關問題