我需要合并列表列表,并在其他列表中不存在项目时添加项目。
我需要一种方法来表示三个列表中的某个列表中的值不存在。在下面的示例中,['e','f']
仅在列表1(l1
)中,因此将在列表2(l2
)和列表3(l3
)中添加一个占位符以表示它在列表1中,但不在列表2和3中。占位符类似于['e','-']
。
l1 = [['a', 'b'],['e','f']]
l2 = [['a', 'b'],['c', 'd']]
l3 = [['a', 'b'],['c', 'd']]
因此,最后,每个列表都将有一个列表项第一位置具有唯一值的任何列表项条目。
l1 = [['a', 'b'],['c','-'],['e','f']
l2 = [['a', 'b'],['c','d'],['e','-']
l3 = [['a', 'b'],['c','d'],['e','-']
我尝试将列表列表转换为集合并可以找到常见对象,例如
l1_set = set(tuple(row) for row in l1)
l2_set = set(tuple(row) for row in l2)
l3_set = set(tuple(row) for row in l3)
print (ipl_set & vgda_set & odm_set)
set([('a', 'b')])
我不确定如何管理集合,因此我可以找到不同的值并修改列表以包括这些不同的值,同时保持列表中的位置。
顺序很重要。我不想简单地添加缺少的列表项,例如:
l1 = [['a', 'b'],['e','f'],['c','-']
l2 = [['a', 'b'],['c','d'],['e','-']
l3 = [['a', 'b'],['c','d'],['e','-']
答案 0 :(得分:1)
函数add_missing_items()
接受任意数量(>0
)的列表,并向其添加其他列表中缺少的项目。假设列表中的项目可以按字母顺序排序:
l1 = [['a', 'b'],['e','f']]
l2 = [['a', 'b'],['c', 'd']]
l3 = [['a', 'b'],['c', 'd']]
def add_missing_items(*lists):
l_sets = [set(tuple(row) for row in l) for l in lists]
u = l_sets[0].union(*l_sets[1:])
for lst, slst in zip(lists, l_sets):
l = [list(v) for v in u.difference(slst)]
for missing_value in l:
missing_value[1::1] = '-' * (len(missing_value)-1)
lst[:] = sorted(lst + l)
add_missing_items(l1, l2, l3)
print(l1)
print(l2)
print(l3)
打印:
[['a', 'b'], ['c', '-'], ['e', 'f']]
[['a', 'b'], ['c', 'd'], ['e', '-']]
[['a', 'b'], ['c', 'd'], ['e', '-']]
答案 1 :(得分:0)
您可以测试列表中的一对是否在另一个列表中,例如:
l1 = [['a', 'b'],['e','f']]
l2 = [['a', 'b'],['c', 'd']]
l3 = [['a', 'b'],['c', 'd']]
for couple in l1:
if couple not in l2:
print(couple)
在上述情况下,这只是一个示例,显示了如何查找与l1
不同的元素。但是,您可以对数组进行图像修改,而不仅仅是打印。
因此,如果要修改数组,建议您复制它们,而不要直接修改原始数组。