gpt4 book ai didi

python - 根据条件合并两个列表

转载 作者:太空宇宙 更新时间:2023-11-04 10:39:18 25 4
gpt4 key购买 nike

我正在尝试根据索引的位置合并两个列表,所以有点接近交集。

集合在这种情况下不起作用。我想做的是匹配每个列表中的索引,然后如果该元素比其他列表中的元素少一个,那么我才收集它。

一个例子可以更好地解释我的场景。

示例输入:

print merge_list([[0, 1, 3], [1, 2], [4, 1, 3, 5]], 
[[0, 2, 6], [1, 4], [2, 2], [4, 1, 6]])

示例输出:

[[0,2],[4,6]]

因此在列表 1 中的位置 0 上我们有 1、3,在列表 2 中我们有 2、6。因为 1 比 2 小一,所以我们收集它并继续,现在 3 小于 6 但它不会少一比即不是 5 所以我们忽略它。接下来我们有 [1, 2][1, 4],所以索引/位置都是 1,但是 2 不小于 4,所以我们忽略它。接下来我们在 list2 中有 [2, 2],两个索引 2 都不匹配第一个列表中的任何索引,因此没有比较。最后我们有 [4, 1, 3, 5] [4, 1, 6] 比较。两个索引都匹配并且列表一中只有 5 比列表二少一所以我们收集六个因此我们收集 [4,6] 意味着索引 4 和匹配等。

我试过让它工作,但我似乎没有让它工作。

到目前为止,这是我的代码。

def merge_list(my_list1, my_list2):
merged_list = []
bigger_list = []
smaller_list = []

temp_outer_index = 0
temp_inner_index = 0

if(len(my_list1) > len(my_list2)):
bigger_list = my_list1
smaller_list = my_list2
elif(len(my_list2) > len(my_list1)):
bigger_list = my_list2
smaller_list = my_list1
else:
bigger_list = my_list1
smaller_list = my_list2

for i, sublist in enumerate(bigger_list):
for index1 , val in enumerate(sublist):
for k, sublist2 in enumerate(smaller_list):
for index2, val2 in enumerate(sublist2):
temp_outer_index = index1 + 1
temp_inner_index = index2 + 1
if(temp_inner_index < len(sublist2) and temp_outer_index < len(sublist)):
# print "temp_outer:%s , temp_inner:%s, sublist[temp_outer]:%s, sublist2[temp_inner_index]:%s" % (temp_outer_index, temp_inner_index, sublist[temp_outer_index], sublist2[temp_inner_index])
if(sublist2[temp_inner_index] < sublist[temp_outer_index]):
merged_list.append(sublist[temp_outer_index])
break


return merged_list

最佳答案

不知道你在做什么,但这应该有效。

首先,将列表的列表转换为索引到该列表中包含的数字集的映射:

def convert_list(l):
return dict((sublist[0], set(sublist[1:])) for sublist in l)

这将使列表更易于使用:

>>> convert_list([[0, 1, 3], [1, 2], [4, 1, 3, 5]])
{0: set([1, 3]), 1: set([2]), 4: set([1, 3, 5])}
>>> convert_list([[0, 2, 6], [1, 4], [2, 2], [4, 1, 6]])
{0: set([2, 6]), 1: set([4]), 2: set([2]), 4: set([1, 6])}

现在 merge_lists 函数可以这样写:

def merge_lists(l1, l2):
result = []
d1 = convert_list(l1)
d2 = convert_list(l2)
for index, l2_nums in d2.items():
if index not in d1:
#no matching index
continue
l1_nums = d1[index]
sub_nums = [l2_num for l2_num in l2_nums if l2_num - 1 in l1_nums]
if sub_nums:
result.append([index] + sorted(list(sub_nums)))
return result

适用于您的测试用例:

>>> print merge_lists([[0, 1, 3], [1, 2], [4, 1, 3, 5]], 
[[0, 2, 6], [1, 4], [2, 2], [4, 1, 6]])
[[0, 2], [4, 6]]

关于python - 根据条件合并两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21688262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com