繁体   English   中英

Python:在列表列表中查找名称

[英]Python: Find a name in a list of lists

所以,我必须在列表中搜索一个名字,并且代码必须给我所有具有该名字的联系人。 例如:我的代码是:

def find_contacts(contacts = [['Bruno Jr', '@brunojr'], ['Brunosvaldo Kean', 'brunosvaldo_kean']], name = 'Bruno'):
    for list in contacts:
        if name in list:
            print(name)

output 应该是 [['Bruno Jr'],[Brunosvaldo Kean]] 但我什么也没得到,我真的不知道为什么 Python 不会给我名字。 有人请帮我理解错误。

如果要查找包含name的项目,请尝试以下操作:

def find_contacts(contacts = [['Bruno Jr', '@brunojr'], ['Brunosvaldo Kean', 'brunosvaldo_kean']], name = 'Bruno'):
  for list in contacts:
    for item in list:
      if name in item:
        print(name)

find_contacts()

如果您有此列表和名称列表:

>>> LoL=[['Bruno Jr', '@brunojr'], ['Brunosvaldo Kean', 'brunosvaldo_kean']]
>>> name='Bruno'

您需要指定要应用in每个子列表的哪些元素,否则它会在列表中寻找完全匹配的元素(即,子列表中是'Bruno' ,而不是'Bruno Jr.' ):

>>> [sl[0] for sl in LoL if name in sl[0]]
['Bruno Jr', 'Brunosvaldo Kean']

或者,如果您想测试子列表中的每个字符串,您可以使用any

>>> [sl[0] for sl in LoL if any(name in s for s in sl)]
['Bruno Jr', 'Brunosvaldo Kean']

使用.upper()any你可以对所有字符串进行不区分大小写的搜索:

>>> [sl[0] for sl in LoL if any('KEAN' in s.upper() for s in sl)]
['Brunosvaldo Kean']

首先,您不应该将您的变量命名为“列表”——它是内置的 python。 尽管如此 - 代码几乎没问题,但您的 if 条件将不起作用,因为您没有确切的名称“布鲁诺”作为列表元素。 您所做的是检查 'Bruno' 是否在 ['Bruno Jr', '@brunojr'] 中 - 要快速修复它,您可能应该在名称字符串的第一个 elem 中搜索:

def find_contacts(contacts = [['Bruno Jr', '@brunojr'], ['Brunosvaldo Kean', 'brunosvaldo_kean']], name = 'Bruno'):
    for person_list_data in contacts:
        if name in person_list_data[0]:
            print(name)

但是,请注意超出范围的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM