什么是替换列表中每个字符串的最佳方法?如何将字符串替换为列表中的其他字符串(python)
例如,如果我有一个列表:
a = ['123.txt', '1234.txt', '654.txt']
,我想有:
a = ['123', '1234', '654']
什么是替换列表中每个字符串的最佳方法?如何将字符串替换为列表中的其他字符串(python)
例如,如果我有一个列表:
a = ['123.txt', '1234.txt', '654.txt']
,我想有:
a = ['123', '1234', '654']
使用列表理解如下:
a = ['123.txt', '1234.txt', '654.txt']
answer = [item.replace('.txt', '') for item in a]
print(answer)
输出
['123', '1234', '654']
假设所有字符串都以'.txt'结尾,只需关闭最后四个字符。
>>> a = ['123.txt', '1234.txt', '654.txt']
>>> a = [x[:-4] for x in a]
>>> a
['123', '1234', '654']
,如果你有一些奇怪的名字,如“some.txtfile.txt”
@ user3612491没问题。作为一个暗示,我想你可能会更清楚地问这个问题。例如,如果你想替换任何字符串,我的答案不适用。目前还不清楚我提到的文件名应该如何处理,例如'some.txtfile.txt'。在某些时候,我们不得不使用正则表达式,但是您的问题似乎更具体,而问题的标题非常宽泛。 – timgeb
您可以用.
分隔符分开你并获得第一个项目这也将工作:
In [486]: [x.split('.')[0] for x in a]
Out[486]: ['123', '1234', '654']
假设示例输入类似于您实际拥有的内容,请使用os.path.splitext()
删除文件扩展名:
>>> import os
>>> a = ['123.txt', '1234.txt', '654.txt']
>>> [os.path.splitext(item)[0] for item in a]
['123', '1234', '654']
另一种方式来做到这一点:
a = [x[: -len("txt")-1] for x in a]
什么是替换列表中每个字符串的最好方法?
这完全取决于你如何定义'最好'。我举个例子,像正则表达式:
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结尾data.colname = [item.replace('anythingtoreplace', 'desiredoutput') for item in data.colname]
请注意,'data'是数据框,'colname'是您可能在该数据框中使用的列名。即使是空格,如果你想从字符串或数字中删除它们。这对我来说非常有用。此外,这不会更改列的数据类型,因此如果需要,您可能必须单独执行此操作。
目前还不清楚您是否在修改字符串或重复创建“列表”时遇到问题。从技术上讲,“只要做'a = ['123','1234','654']'”就可以准确回答这个问题。你正在让回答者进行“心理调试”(又名“猜测”)。 – TigerhawkT3