对此有类似的问题但不是我想要的。
创建了一个包含特定路径中所有文件的列表,我希望过滤掉字符串中不包含特定序列的所有内容。
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"的每个元素时我应该采取什么方法。我上面写的更像是草稿。
答案 0 :(得分:3)
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))
答案 1 :(得分:1)
首先,您不需要使用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中起作用)