[英]Need unique nested list from nested list
我有以下嵌套列表:
sample = [['Ban', 'App'], ['Ban', 'Ora'], ['Gra', 'App'], ['Gra', 'Ora'], ['Kiw','App'], ['Kiw', 'Ora'], ['Man', 'Blu'], ['Pin', 'App']]
我需要考虑嵌套列表sample
的每个子列表中没有出现在任何其他子列表中的项目。
例如,我的 output 列表需要包含 nested_list 的第一个元素。 我需要将 ['Ban', 'App'] 与列表的 rest 进行比较。 由于元素 2 中的“Ban”和元素 3 中的“App”存在于['Ban', 'App']
中,因此我们不考虑它们。 我的下一个 output 元素将是['Gra', 'Ora']
因为这些项目不在['Ban', 'App']
中。
现在我的 output 是[['Ban', 'App'], ['Gra', 'Ora']]
我必须将嵌套列表的 rest 与这两个元素进行比较。 我的下一个元素是['Kiw','App']
和['Kiw', 'Ora']
。 由于 'App' 在['Ban', 'App']
中,而 'Ora' 在['Gra', 'Ora']
中,因此它不会出现在 output 列表中。
我的 output 列表仍然是[['Ban', 'App'], ['Gra', 'Ora']]
。 我的下一个元素是['Man', 'Blu']
,这些是全新的项目,将添加到我的 output 列表中。
我的新 output 列表是[['Ban', 'App'], ['Gra', 'Ora'], ['Man', 'Blu']]
。 最后一个元素是['Pin', 'App']
并且由于“App”在['Ban', 'App']
中,即使“Pin”是一个新项目,我们也不考虑这个项目。
我的最终 output 应该是[['Ban', 'App'], ['Gra', 'Ora'], ['Man', 'Blu']]
。
final_output = [['Ban', 'App'], ['Gra', 'Ora'], ['Man', 'Blu']]
我从下面的代码开始,但这并不能完全满足我的需要:
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
我会保留一个集合来跟踪已经看到的项目,并且只有在与该集合没有交集的情况下才将这对添加到最终列表中。
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']]
您应该使用一个集合来保存您已经看过的值。 然后您可以遍历每个子列表中的每个项目并检查它们是否在集合中:
seen = set()
filtered = []
for sublist in sample:
if sublist[0] in seen or sublist[1] in seen:
continue
filtered.append(sublist)
seen.add(sublist[0])
seen.add(sublist[1])
此代码通过迭代sample
并检查其中每个sublist
中的任何项目是否在集合中来工作。 如果是,那么我们将忽略该项目并继续。 否则,将sublist
列表添加到过滤列表并将项目添加到集合中。 此代码的运行速度将比您拥有的代码快得多(O(n) vs. O(n^2))。
此代码没有考虑的一件事是,您的子列表中有一项已被查看,而另一项未被查看。 您可能需要修改代码来处理这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.