Python使用特定字符串

时间:2016-08-16 12:57:45

标签: python python-3.x

对此有类似的问题但不是我想要的。

创建了一个包含特定路径中所有文件的列表,我希望过滤掉字符串中不包含特定序列的所有内容。

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"的每个元素时我应该采取什么方法。我上面写的更像是草稿。

2 个答案:

答案 0 :(得分:3)

for i in range(0, listSize):
    if (".py" not in someFiles):
        someFiles.remove(i)

请注意,您尝试从列表中删除ii将是列表中元素的索引(01等),而不是实际元素。这会引发错误。


只需使用列表理解即可只获取 所需的文件:

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中起作用)