На самом деле невозможно определить общий порядок всех ключей из ваших двух списков, и из ваших комментариев порядок в любом случае не очень важен.Таким образом, было бы намного проще использовать словари вместо этого, сопоставляя ключ (первый элемент кортежей, который вы используете для определения равенства) с реальными кортежами.
>>> d1 = {a: (a,b,c) for a,b,c in list_1}
>>> d2 = {a: (a,b,c) for a,b,c in list_2}
Вы можете легко получить всеключи от обоих (или любого числа) диктиан и используют словарное понимание, чтобы получить окончательный диктант с «пропущенными» значениями.
>>> all_keys = set(d1) | set(d2)
>>> {k: d1.get(k, "missing") for k in all_keys}
{'quantity': ('quantity', 'YES', 'int'),
'marks': 'missing',
'name': 'missing',
'state': ('state', 'YES', 'varchar')}
И аналогично для list_2
.Конечно, вы также можете использовать понимание списка.Будет сложнее узнать, какие элементы отсутствуют, но соответствующие элементы будут находиться в той же позиции, хотя не обязательно в тех же (относительных) позициях, что и в исходных списках.
>>> [d1.get(k, "missing") for k in all_keys]
[('quantity', 'YES', 'int'), 'missing', 'missing', ('state', 'YES', 'varchar')]
>>> [d2.get(k, "missing") for k in all_keys]
['missing', ('marks', 'YES', 'varchar'), ('name', 'NO', 'varchar'), ('state', 'YES', 'int')]