【发布时间】:2021-06-24 09:37:12
【问题描述】:
我是 Python 新手,我有两个解决方案可以解决我的问题,但我想知道这是正确的方法还是有更聪明的解决方案?
我有一个包含对象的列表和第二个包含字典的列表。 两者都包含名称。 我想比较两个列表中是否包含名称。
对象列表的类
class Person():
def __init__(self, name):
self.name = name
为示例创建两个列表
i = 0
while i < 100:
person_list.append(Person("test" + str(i)))
i += 1
search_list = list()
i = 300
while i > 0:
search_list.append({"name": "test" + str(i)})
i -= 1
选项 a 对我来说似乎效率很低,因为它在 search_list 的每次迭代中都会遍历整个 person_list
for search in search_list:
if [p for p in person_list if p.name == search["name"]]:
print(search["name"] + " found")
else:
print(search["name"] + " not found")
我不想从 person_list 中删除某些内容以缩短迭代时间,因为我稍后会重用它。
选项 b 创建一个新列表,其中仅包含在此列表中搜索之前的名称
for search in search_list:
if search["name"] in names:
print(search["name"] + " found")
names.remove(search["name"])
else:
print(search["name"] + " not found")
【问题讨论】:
标签: python list dictionary object