2016-01-22 67 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'是您可能在该数据框中使用的列名。即使是空格,如果你想从字符串或数字中删除它们。这对我来说非常有用。此外,这不会更改列的数据类型,因此如果需要,您可能必须单独执行此操作。

相关问题