![](/img/trans.png)
[英]Search a Python list for a specific string using unknown elements in list
[英]Python remove elements from unknown list with a specific string
有與此類似的問題,但不是我想要的。
創建了包含來自特定路徑的所有文件的列表后,我試圖過濾掉字符串中不包含特定序列的任何內容。
def filter():
someFiles = os.listdir(somePath)
listSize = len(someFiles)
for i in range(0, listSize):
if (".py" not in someFiles):
someFiles.remove(i)
print("{0}".format(someFiles))
我知道我不應該通過循環來修改列表的大小,但是我只是為了大致了解我要完成的工作而離開了列表
我沒有說清楚,我面臨的問題是我不確定在嘗試刪除不包含“ .py”的每個元素時應該采用哪種方法。 我在上面寫的只是草稿。
for i in range(0, listSize):
if (".py" not in someFiles):
someFiles.remove(i)
請注意,您正在嘗試從列表中刪除i
。 i
將在列表中(的元素的索引0
, 1
,等等),而不是實際的元件。 這將引發錯誤。
只需使用列表理解只得到你所需要的文件:
required_files = [f for f in someFiles if '.py' in f]
您還可以使用filter
但是它需要一個lambda(還要注意,它將返回一個filter
對象而不是一個list
):
required_files = list(filter(lambda x: '.py' in x, someFiles))
首先,您不需要使用for循環來迭代Python中的列表。 您所做的工作的簡單版本是
list2 = []
for filename in list1:
if (".py" in filename):
list2.append(filename)
但是過濾列表(或更普遍地講,是迭代器)非常普遍,以至於有Python內置函數叫做filter
:
list2 = list(filter(lambda i: ".py" in i, list1))
(這至少在Python3中有效)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.