[英]How to strip/remove certain characters from a lsit
我目前正在尝试从列表中递归删除某些字符。
我有一个清单:
lst1 = ['ZINC1_out.pdbqt', 'ZINC2_out.pdbqt', 'ZINC3_out.pdbqt']
我想删除“_out”,使列表看起来像这样
>>lst1
['ZINC1.pdbqt', 'ZINC2.pdbqt', 'ZINC3.pdbqt']
我当前的代码如下所示:
lst1 = ['ZINC1_out.pdbqt', 'ZINC2_out.pdbqt', 'ZINC3_out.pdbqt']
for i in lst1:
lst1.strip("_out")
但我收到一个错误:AttributeError: 'list' object has no attribute 'strip'。
任何帮助将非常感激。
以下代码实现了您的目标。 正如@drum 已经建议的那样,替换方法对此很有用。
lst1 = ['ZINC1_out.pdbqt', 'ZINC2_out.pdbqt', 'ZINC3_out.pdbqt']
lst2 = []
for i in lst1:
lst2.append( i.replace("_out", "") )
print(lst2)
您的代码现在的问题是您试图剥离列表,而不是列表中的属性。 我鼓励您对for
循环进行更多研究。 将来,请先在 google 上搜索、查看文档或查找其他类似问题,然后再提出自己的问题。
字符串的split
方法用于从字符串的前面和后面删除字符。 在这种情况下,您希望从字符串中间删除特定字符。 为此,我们将使用string.replace(characterstoreplace, whattoreplaceitwith)
方法。
生成的代码应如下所示。 请尝试自己理解它,而不仅仅是复制粘贴它。 你有什么问题可以问我。
lst1 = ['ZINC1_out.pdbqt', 'ZINC2_out.pdbqt', 'ZINC3_out.pdbqt']
for i in range(len(lst1)): #goes through every attribute in the list, represented by i
lst1[i] = lst1[i].replace("_out", "") #replaces '_out' with nothing and sets the new value
如果您不想进行列表理解,也可以使用map
删除字符串。
list(map(lambda x:x.replace('_out',''),lst1))
Out[136]: ['ZINC1.pdbqt', 'ZINC2.pdbqt', 'ZINC3.pdbqt']
要查看性能,让我们尝试使用字符串中的 30000 个组件。
# Appending to list (From @Hanno Reuvers)
%timeit append_list_function()
8.68 ms ± 236 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
# List comprehension
%timeit [s.replace('_out', '') for s in newlist]
7.06 ms ± 361 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
# Map function
%timeit list(map(lambda x:x.replace('_out',''),newlist))
8.69 ms ± 137 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.