3

У меня есть своя сложная проблема, с которой я с трудом переворачиваю голову.вычесть список списков из списка списков с условными аргументами

У меня есть два списка списков:

firstList = [[0, 9], [0, 4], [0]] 
secondList = [[18], [19, 7], [20]] 

Я хотел бы вычесть значение (ы) в firstList от значений в secondList в порядке возрастания, но только, если значения в firstList не уже «используется». Например:

thirdList = [0,4] 
fourthList = [19,7] 
emptyList = [] 

emptyList.append(fourthList-thirdList] 
print(emptyList) 
>>>[7,3] 

В этом случае 19 не используется, потому что не было никаких значений в thirdList между предыдущим значением в fourthList и 19

Я имею в виду что-то вроде этого (хотя он быстро разлагается в псевдокоде)

firstList = [[0, 9], [0, 4], [0]] 
secondList = [[18], [19, 7], [20]] 
emptyList = [ [] for y in range(3) ] 

for x in range(3) : 
    #for smallest value in secondList[x], subtract all smaller values in firstList and then delete them, append values to emptyList[x] 
    #for next smallest value in secondList[x], subtract all smaller values in firstList and then delete them, append values to emptyList[x] 
    #repeat until firstList is empty, then exit loop 

print(emptyList) 
>>>[[9, 18], [3, 7], [20]] 

это исключило бы использование 19 в secondList [1], потому что 0 и 4 уже удалены после того, как subtr действовал из 7

ответ

1
firstList = [[0, 9], [0, 4], [0]] 
secondList = [[18], [19, 7], [20]] 
all_results = [] 

for x in range(0, len(firstList)): 
    values_of_first = firstList[x] 
    values_of_second = secondList[x] 
    values_of_first.sort() 
    values_of_second.sort() 
    tmp_results = [] 

    for subtractor in values_of_second:  
     used_values = [] 
     for subtracted in values_of_first: 
      if subtracted >= subtractor: 
       break 
      else: 
       used_values.append(subtracted) 
       tmp_results.append(subtractor - subtracted) 

     for used_value in used_values: 
      values_of_first.remove(used_value) 

    tmp_results.sort() 
    all_results.append(tmp_results) 

Он производит all_results == [[9, 18], [3, 7], [20]]

Смежные вопросы