我有两个清单。我想合并这两个列表。
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_2
则list_2
值最终从索引 1 插入list_1
(检查list_1 = ['e4', 'z', 'c', 'd', 'code', 'e', 'e2', 'f', 'h', 'i', 'j']
)。
为了避免ValueError
在连续缺失元素的情况下,缺失元素直接插入到 中list_1
,从左到右(这也可以用单独的列表来完成,当然,重点是从左到右的插入顺序,这样邻居总是存在于合并列表中)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句