Я пытаюсь объединить два списка на основе позиции индекса, поэтому вид пересечения близости.Объединить два списка по условию
В этом случае комплект не работает. То, что я пытаюсь сделать, - это индекс соответствия в каждом списке, а затем, если элемент меньше, чем элемент в другом списке, только тогда я его собираю.
Пример объяснит мой сценарий лучше.
Пример ввода:
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]]
так далее положение 0 в list1 мы имеем 1, 3 и в list2 мы имеем 2, 6. Так как 1 составляет менее 2, поэтому мы собираем и двигаемся дальше, теперь 3 меньше, чем 6, но это не меньше, чем т. е. не 5, поэтому мы игнорируем это. Далее мы имеем [1, 2] [1, 4], поэтому оба индекса/позиции 1, но 2 не меньше, чем 4, поэтому мы игнорируем это. Далее у нас [2, 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
Не было бы [[1, 3], [2], [], [], [1, 3, 5]] и [[2, 6], [4], [2], [], [1, 6]] 'делает гораздо больше смысла в качестве входных данных, поэтому индекс * является фактическим индексом? – poke
@poke, спасибо за ваш комментарий. В моем другом коде мы создаем их, я только создаю те, у которых есть данные, т. Е. Нет []. Я знаю, что это делается с большей готовностью, но не требуется, и я думаю, что не эффективен и т. Д. – user3247054