[英]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.