替换列表中每个字符串的最佳方法是什么?
例如,如果我有一个列表:
a = ['123.txt', '1234.txt', '654.txt']
我希望:
a = ['123', '1234', '654']
答案 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]+
仅限数字\..*
vs \.txt
答案 6 :(得分:0)
data.colname = [item.replace('anythingtoreplace', 'desiredoutput') for item in data.colname]
请注意这里的数据&#39;是数据框,&#39; colname&#39;是该数据帧中可能包含的列名称。如果要从字符串或数字中删除它们,甚至会考虑空格。这对我来说非常有用。此外,这不会更改列的数据类型,因此如果需要,您可能必须单独执行此操作。