需要嵌套列表中唯一的嵌套列表

Sri*_* TR 1 python loops list nested-lists python-3.x

我有以下嵌套列表:

sample = [['Ban', 'App'], ['Ban', 'Ora'], ['Gra', 'App'], ['Gra', 'Ora'], ['Kiw','App'], ['Kiw', 'Ora'], ['Man', 'Blu'], ['Pin', 'App']]
Run Code Online (Sandbox Code Playgroud)

我需要考虑嵌套列表的每个子列表中的项目,sample这些项目不会出现在任何其他子列表中。

例如,我的输出列表需要包含nested_list 的第一个元素。我需要将 ['Ban', 'App'] 与列表的其余部分进行比较。由于元素 2 中的“Ban”和元素 3 中的“App”存在于 中['Ban', 'App'],因此我们不考虑它们。我的下一个输出元素将是['Gra', 'Ora']因为这些项目不在['Ban', 'App'].

现在我的输出是[['Ban', 'App'], ['Gra', 'Ora']],我必须将嵌套列表的其余部分与这两个元素进行比较。我的下一个元素是['Kiw','App']['Kiw', 'Ora']。由于“App”位于 中['Ban', 'App'],“Ora”位于 中['Gra', 'Ora'],因此它不会出现在输出列表中。

我的输出列表仍然是[['Ban', 'App'], ['Gra', 'Ora']]. 我的下一个元素是['Man', 'Blu'],这些是全新的项目,这将添加到我的输出列表中。

我的新输出列表是[['Ban', 'App'], ['Gra', 'Ora'], ['Man', 'Blu']]. 最后一个元素是,['Pin', 'App']并且由于“App”位于 中['Ban', 'App'],因此即使“Pin”是一个新项目,我们也不考虑该项目。

我的最终输出应该是[['Ban', 'App'], ['Gra', 'Ora'], ['Man', 'Blu']].

final_output = [['Ban', 'App'], ['Gra', 'Ora'], ['Man', 'Blu']]
Run Code Online (Sandbox Code Playgroud)

我从下面的代码开始,但这并不完全符合我需要它做的事情:

j =0
for i in range(len(sample)):
    #print ("I:", str(i))
    #print ("J" ,str(j))
    i = j
    for j in range(1, len(sample)):
        if sample[i][0] == sample[j][0] or sample[i][0] == sample[j][1] or sample[i][1] == sample[j][0] or sample[i][1] == sample[j][1]:
            pass
        else:
            print (sample[i], sample[j])
            #print (j)
            i = j
            break
Run Code Online (Sandbox Code Playgroud)

cot*_*ail 6

我会保留一个集合来跟踪已经看到的项目,并且仅在与该集合没有交集时才将这对添加到最终列表中。

st = set()
final_output = []
for pair in sample:
    if not st.intersection(pair):
        final_output.append(pair)
        st.update(pair)

print(final_output)
# [['Ban', 'App'], ['Gra', 'Ora'], ['Man', 'Blu']]
Run Code Online (Sandbox Code Playgroud)