Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的对象过滤器数组_Python_Python 3.x_Oop - Fatal编程技术网

Python中的对象过滤器数组

Python中的对象过滤器数组,python,python-3.x,oop,Python,Python 3.x,Oop,我正在使用Python挖掘一个相当大的项目,并挖掘有关它的信息。我能够创建一个ProjectFiles数组,但是我很难弄清楚如何过滤它 class ProjectFile: def __init__(self, filename: str, number_of_lines: int, language: str, repo: str, size: int

我正在使用Python挖掘一个相当大的项目,并挖掘有关它的信息。我能够创建一个
ProjectFile
s数组,但是我很难弄清楚如何过滤它

class ProjectFile:
    def __init__(self, filename: str,
                 number_of_lines: int,
                 language: str,
                 repo: str,
                 size: int):
        self.filename = filename
        self.number_of_lines = number_of_lines
        self.language = language
        self.repo = repo
        self.size = size
如何为特定的
repo
过滤
ProjectFile
对象数组

例如,假设我想筛选
repo
属性为
somecoacoapod
的对象


我已经查找了
filter
的示例,但我找到的所有内容都使用了简单的示例,如
str
列表或
int

您可以使用点符号选择类的属性

假设
arr
是一个ProjectFile对象数组。现在,您可以使用来筛选某些CoCoapod

filter(lambda p: p.repo == "SomeCocoapod", arr)
注意:这将返回一个筛选器对象,它是一个生成器。要恢复过滤列表,可以将其包装在列表构造函数中

作为一种非常类似Python的替代方法,您可以使用列表理解:

filtered_arr = [p for p in arr if p.repo == "SomeCocoapod"]

假设您有两个
ProjectFile
对象的简单列表:

projects = [
    ProjectFile(
        filename="test1.txt",
        number_of_lines=1,
        language="English",
        repo="repo1",
        size=1,
    ),
    ProjectFile(
        filename="test2.txt", 
        number_of_lines=2, 
        language="German", 
        repo="repo2", 
        size=2
    ),
]
然后,您可以使用以下内容中的
repo
属性筛选出
repo1


以上假设您已经在
项目文件
类中重写了
\uuuu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
\uuuuuu repr\uuuuuuuuuuuuuuuuuu
,为您提供了筛选对象的字符串表示形式。否则,您将返回类似于
[]
的内容(如果这是您希望看到的内容,则可以)。您可以查看以了解更多信息

太棒了!在使用
lambda
进行过滤时,我需要将过滤器包装在
列表中,它可以完美地工作:)
filtered = [project for project in projects if project.repo == "repo1"]