繁体   English   中英

如何从 lsit 中删除/删除某些字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM