在python中比较和合并两个列表

苏拉布·米塔尔

我有两个清单。我想合并这两个列表。

list_1 = ['a', 'b', 'c', 'd', 'f', 'g', 'h', 'i']
list_2 = ['a', 'b', 'd', 'e', 'f', 'h', 'i']

我想要的输出是

['a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i']

我尝试了以下算法

missing_elem = []
missing_index = []
elem_to_add = []

for i, elem in enumerate(list_2):
    if elem not in list_1:
        missing_elem.append(elem)
        missing_index.append(i)

print(missing_index)
print(missing_elem)

for i in range(len(missing_index)):
    elem_to_add.append(missing_elem[i])
    list_1.insert(missing_index[i], col_to_add)
    elem_to_add = []
    
print(list_1)

上面的输出是

[3]
['e']
['a', 'b', 'c', ['e'], 'd', 'f', 'g', 'h', 'i']

由于 e 在 list_2 中的 'd' 和 'f' 之间,但在输出中我得到它在 'c' 和 'd' 之间,请帮助我获得正确的输出

阿特鲁

这是一个可能的解决方案,以您的努力为基础:

list_1 = ['a', 'c', 'b', 'b2', 'd', 'f', '1g', 'h', 'i']
list_2 = ['e4', 'z', 'a', 'c', 'd', 'code', 'e', 'e2', 'f', 'h', 'i', 'j']

print(list_1)

# Locate the missing elements in list_1 and their left neighbors
missing_elem_and_neighbor = []
for ind, elem in enumerate(list_2):
    if elem not in list_1:
        if ind > 0:
            missing_elem_and_neighbor.append((elem, list_2[ind-1]))
        else:
            missing_elem_and_neighbor.append((elem, None))

# Insert missing elements into list_1
for elem, nei in missing_elem_and_neighbor:
    if nei:
        ind_nei = list_1.index(nei)
        list_1.insert(ind_nei+1, elem)
    else:
        if list_1[0] in list_2:
            # Goes before 0 in list_1
            list_1.insert(0, elem)
        else:
            # Assumption - right after the first in list_1
            list_1.insert(1, elem)

print(list_1)

我使测试用例更具代表性 - 它不是按字母顺序排列以避免混淆,它有连续的缺失值,并且它也从缺失值开始。

这段代码没有找到缺失值,而是找到了它们的左邻居。然后它根据左邻居在 中的位置插入缺失值list_1,从而保持顺序。

如果缺失值出现在 的第一个元素之前list_1,它们只是list_1按照它们出现的顺序插入到 的开头list_2如果 in 中的第一个元素list_1完全缺失,list_2list_2值最终从索引 1 插入list_1(检查list_1 = ['e4', 'z', 'c', 'd', 'code', 'e', 'e2', 'f', 'h', 'i', 'j'])。

为了避免ValueError在连续缺失元素的情况下,缺失元素直接插入到 中list_1,从左到右(这也可以用单独的列表来完成,当然,重点是从左到右的插入顺序,这样邻居总是存在于合并列表中)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章