セットのメンバーシップ チェックは、手動で反復してチェックするよりもはるかに高速です。
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)
これらは両方とも、チェックが行われるたびにではなく、データの処理を 1 回だけ行います。
セットは、セット側で重複する値や順序を処理しないことに注意してください。それが重要な場合、これは有効な解決策ではありません。このバージョンでは、反復処理中のデータからの順序/複製のみが使用されます。それが有効でない場合でも、事前にデータを処理し、 を使用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)