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