簡體   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