对集合的成员资格检查将比手动迭代和检查快得多:
children = {child.get('value') for child in xml_data}
for item in main_list:
if item[4] in children:
print(item[4])
这里我们用一个简单的集合推导来构造集合。
请注意,交换集合中的数据可能是值得的 - 如果main_list
更长,则制作该数据集的效率更高。
items = {item[4] for item in main_list}
for child in xml_data:
value = child.get('value')
if value in items:
print(value)
它们也只对数据进行一次处理,而不是每次进行检查。
请注意,集合不会处理集合端的重复值或顺序 - 如果这很重要,这不是一个有效的解决方案。此版本将仅使用您正在迭代的数据的顺序/重复项。如果这无效,那么您仍然可以事先处理数据,并使用它itertools.product()
来更快地迭代。
items = [item[4] for item in main_list]
children = [child.get('value') for child in xml_data]
for item, child in itertools.product(items, children):
if item == child:
print(item)
正如 Karl Knechtel 指出的那样,如果你真的不关心重复的顺序,你可以做一个集合交集:
for item in ({child.get('value') for child in xml_data} &
{item[4] for item in main_list}):
print(item)