【问题标题】:Searching a list to see if there is a match python搜索列表以查看是否有匹配的python
【发布时间】:2014-05-27 02:22:06
【问题描述】:

基本上这是在一个类中,它将另一个类的对象附加到列表自身。列表 self 中有 200 个对象。所以基本上如果我调用 self[1] 我会得到 ['John',['Alex', 'Rob']。基本上,'john' 指的是 self.firstname,其他名称指的是组成员。例如,下面将打印所有 200 个对象的每个对象的名字和组成员

  for line in self:
    print line.firstname

for line in self:
print line.groupmembers

现在我必须创建一个遍历所有名称并检查名称的东西。所以基本上,如果 John 有 Alex 和 Rob 作为成员,那么就必须有另一个名字为 Alex 的对象和另一个名字为 Rob 的对象。所以说没有名字亚历克斯的对象我想打印“不匹配”。这是我到目前为止所拥有的,但它没有做它打算做的事情。

    def name(self):
            firstnames = []
            for item in self:
                firstnames.append(item.firstname)
            for item1 in self:
                for i in item1.groupmembers:
                    if i not in hello:
                        print 'mismatch'

【问题讨论】:

  • for item in self 应该做什么?您的类是否继承了可迭代的东西或以其他方式正确实现了该行为?
  • self 中的每个项目(这有 200 个对象)都是不同的学生对象。所以我正在遍历每个对象并将名字附加到列表中
  • 您的类是否是可迭代的子类或以其他方式正确实现此行为?您不能只通过 for 循环传递任何类的实例并让它工作。

标签: python list class


【解决方案1】:

好的,首先,lineself 是错误的变量名。 self 只能在类中使用,以用作调用或使用其自身变量的一种方式。

其次,你说这个 self 列表中的每个值都包含像 ['John',['Alex', 'Rob'] 这样的值,但是你继续像类对象一样使用它......坦率地说,这没有任何意义。

因此,为了解决这个问题,我将假设它使用类对象完成。我也会将 self 重命名为 school 之类的东西,而不是调用 self 的元素;行,它不会向读者提供任何信息.. 称它为学生!

我会假设你的班级开始看起来像这样:

class Student:
    # having an empty default value makes it easy to see what types variables should be!
    firstname = ""
    groupmembers = []
    def __init__(self,firstname,groupmembers ):
        self.firstname = firstname
        self.groupmembers = groupmembers

如果你有一个人列表,你可以像这样循环遍历他们..

>>>school = [Student("foo", ["bar", "that guy"]),
          Student("bar", ["foo", "that guy"])]

>>>for student in school:
    print student.firstname
    print student.groupmembers

foo 
["bar", "that guy"]
bar
["foo", "that guy"]

然后要检查学生组成员是否在学校,您可以向学生类添加一个函数

class Student:
    # having an empty default value makes it easy to see what types variables should be!
    firstname = ""
    groupmembers = []
    def __init__(self,firstname,groupmembers ):
        self.firstname = firstname
        self.groupmembers = groupmembers

    def group_present(self, school):
        # This is how you would get all the names of kids in school without list comprehension
        attendance = []
        for student in school:
            attendance.append(student.firstname)
        # this is with list comprehension
        attendance = [ student.firstname for student in school]
        #compare group members with attendance
        #note that I write student_name, not student
        ## helps point out that it is a string not a class
        for student_name in self.groupmembers:
            if not student_name in attendance:
                print "Group member '{}' is missing :o!! GASP!".format(student_name)

闲置:

>>> school[0].group_present(school)
Group member 'that guy' is missing :o!! GASP!

希望有帮助!

【讨论】:

    【解决方案2】:

    我不确定我是否完全理解,但也许你可以使用 contains

    self[1].__contains__('Alex')
    

    如果存在则返回 true,否则返回 false。

    【讨论】:

    • 你的意思是"Alex" in self[1]
    猜你喜欢
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多