如何将字符串替换为列表中的其他字符串(python)

时间:2016-01-22 12:40:01

标签: python

替换列表中每个字符串的最佳方法是什么?

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

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

我希望:

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

7 个答案:

答案 0 :(得分: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 :(得分:2)

使用列表推导如下:

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

<强>输出

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

答案 2 :(得分:2)

假设你的所有字符串以'.txt'结尾,只需将最后四个字符切掉。

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

如果您有一些奇怪的名称,例如'some.txtfile.txt'

,这也会有效

答案 3 :(得分:1)

您可以使用.分隔符拆分并获取第一项:

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

答案 4 :(得分:1)

另一种方法:

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

答案 5 :(得分: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]+仅限数字
  • 如果所有字符串都以.txt 结尾,则
  • \..* vs \.txt

答案 6 :(得分:0)

data.colname = [item.replace('anythingtoreplace', 'desiredoutput') for item in data.colname]
  

请注意这里的数据&#39;是数据框,&#39; colname&#39;是该数据帧中可能包含的列名称。如果要从字符串或数字中删除它们,甚至会考虑空格。这对我来说非常有用。此外,这不会更改列的数据类型,因此如果需要,您可能必须单独执行此操作。