我有一个像这样的列表,并且在循环中添加了新内容。
list = [("banana", "a", 0), ("banana", "b", 1), ("coconut", "a", 2)]
在循环中,我想添加以下项目:
list.append(("strawberry", "b", 4))
但是,如果该序列中的第一项和第二项已经一起在列表中,则不会发生这种情况。例如,以下列表不能添加到
list
,因为第一项已经包含“香蕉”和“ a”。("banana", "a", 5) # Should NOT be appended
("banana", "c", 6) # SHOULD be appended
("strawberry", "a", 7) # SHOULD be appended
在常规列表中,我们将执行以下操作以避免重复:
if not item in list:
list.append(item)
但请注意,我的情况仅涉及部分重复,即子列表之间的前两项不能相同。
我正在寻找一种非常有效的解决方案,因为该列表可以包含数千个项目。
最佳答案
我强烈建议对这种类型的数据耦合结构使用字典,以及O(1)查找时间,您还将实现更好的设计。但是,您可以使用以下方法对当前数据结构执行此操作:
样本输出:
当前结构:
l = [ ("banana", "a", 0), ("banana", "b", 1), ("coconut", "a", 2) ]
items_to_add = [("banana", "a", 5), ("banana", "c", 6), ("strawberry", "a", 7)]
for item_to_add in items_to_add:
if not item_to_add[:2] in [i[:2] for i in l]:
l.append(item_to_add)
print l
>>> [('banana', 'a', 0), ('banana', 'b', 1), ('coconut', 'a', 2),
('banana', 'c', 6), ('strawberry', 'a', 7)]
否则,您可以使用字典(将您的前两个元素分解为关键字):
带字典:
d = { ("banana", "a") : 0, ("banana", "b") : 1, ("coconut", "a") : 2 }
items_to_add = [("banana", "a", 5), ("banana", "c", 6), ("strawberry", "a", 7)]
for item_to_add in items_to_add:
key = item_to_add[:2]
value = item_to_add[-1]
if not key in d:
d[key] = value
print d
>>> {('coconut', 'a'): 2, ('strawberry', 'a'): 7, ('banana', 'c'): 6,
('banana', 'a'): 0, ('banana', 'b'): 1}
当您尝试利用键/值数据结构的属性时,字典在这种情况下非常有效。确保唯一密钥,这也是最有效的途径。
关于python - 仅将三项中三项中的两项相比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38833937/