Работайте со списком и заменяйте значения - PullRequest
2 голосов
/ 10 июля 2020

У меня есть список под названием 'list_one' , который я пытаюсь связать с 'list_relation' , чтобы наконец получить окончательный список значений, мой logi c выглядит как следует:

Путем цикла в диапазоне 'list_one' и для каждого 'items_relation' из 'list_relation' :

1. Если 'list_one [i] [0]' находится внутри 'items_relation' , я добавляю соответствующую операцию 'list_one' .

list_one = [[1,      0], 
             [2,     0], 
             [3,     0],
             [4,     0], 
             [11,    0], 
             [12,    0], 
             [13, 2000], 
             [14, 3000], 
             [15, 3500], 
             [16, 5000], 
             [17, 6500], 
             [18, 8800], 
             [19, 6700],
             [20,  280]]

# Code to get this 'list_relation' ...

list_relation = [[13, 14], [15, 16], 
                 [17, 18], [19, 20]]
             
final = []
for i in range(len(list_one)):
    for items_elements in list_relation:
        for k in items_elements:
            if list_one[i][0] in items_elements:
                final.append((list_one[i][1] + list_one[i][0]))  
print(final)

Я ищу такой список:

[[2013, 3014], [3515, 5016], [6517, 8818], [6719, 300]]

Как лучше всего это сделать? Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

list_one выглядит как таблица поиска - было бы разумнее использовать словарь вместо списка. Затем l oop через значения list_relation, выполните поиск в словаре и добавьте значение, если оно есть. Если его там нет, получите значение по умолчанию 0, чтобы оно не влияло на сумму. Это также означает, что нет необходимости включать записи поиска со значениями 0:

list_one = {13: 2000,  # note choose a better var name
            14: 3000, 
            15: 3500, 
            16: 5000, 
            17: 6500, 
            18: 8800, 
            19: 6700,
            20: 280,}

list_relation = [[13, 14], 
                 [15, 16], 
                 [17, 18], 
                 [19, 20]]

final = [[item + list_one.get(item, 0) 
          for item in pair] 
         for pair in list_relation]
2 голосов
/ 10 июля 2020

Вы можете создать словарь из list_one, а затем выполнить итерацию для создания результирующего списка.

>>> d = dict(list_one)
>>> final = [[el+d[el] for el in l] for l in list_relation]
>>> final
[[2013, 3014], [3515, 5016], [6517, 8818], [6719, 300]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...