在列表中搜索项目中包含列表

时间:2015-10-27 04:44:35

标签: python python-2.7

我必须为一个小项目做联系簿。 我有一个列表,其中包含列表,如:

Contact_List = [["Smith", "John", "780 555 3234", "jsmith@gsacrd.ab.ca"], ["Pitts", "Harry", "780 555 7329", "hpitts@gmail.com"], ["Fields", "Sara", "780 555 8129", "sfields@hotmail.com"], ["Smith", "Jane", "780 555 2819", "jsmith@gmail.com"], ["Unger", "Felix", "302 555 3819", "funger@universal.org"]]

所以,我想按姓名或姓氏进行搜索,我想打印该特定联系人。

def SearchByName():
  print "Search Contact by the Name"
  name = raw_input("Enter the name :")
  def search(name[0], name[-1]):
      for x in Contact_list:
          if (x[0] == first) and (x[1] == last):
              print 'contact found it'
              print x[2], x[3]
          else:
              print "This Contact Does Not Exist!!"

并且始终打印

"This Contact Does Not Exist!!"

还有一个名为SearchByLastname的def 所以,如果我们可以修复,我可以编辑

2 个答案:

答案 0 :(得分:2)

如果用户输入的姓名和姓氏之间有空格,则需要使用拆分

name = raw_input("Enter the name :").split()

你的代码应该是这样的:

def SearchByName():
    print "Search Contact by the Name"
    name = raw_input("Enter the name :").split()
    search(name[0], name[-1])

def search(first, last):
    for x in Contact_list:
        if (x[0] == first) and (x[1] == last):
            print 'contact found it'
            print x[2], x[3]
            break
    else:
        print "This Contact Does Not Exist!!"
SearchByName()

答案 1 :(得分:1)

在您的解决方案中,当else条件为假时,您会在每次迭代时转到if块。

成功比较后放置break并移动else成为循环的一部分。

这应该这样做:

    for x in Contact_list:
        if (x[0] == first) and (x[1] == last):
            print 'contact found it'
            print x[2], x[3]
            break
    else:
        print "This Contact Does Not Exist!!"

在找到第一个匹配的联系人后,这将中断。如果您需要找到所有匹配的联系人,则必须重新设计解决方案。