簡體   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