Перезаписать значение списка, если определенное условие для другого списка верно (python) - PullRequest
0 голосов
/ 01 марта 2019

К сожалению, я не смог уточнить название, но пример должен прояснить мою проблему.У меня есть два списка f и a, и если f [i] равен f [i-1].Я хотел бы иметь новую запись в f, которая равна f [i] и f [i-1] (очевидно) и перезаписывает их обоих.В a я хотел бы иметь a_new = a [i] + a [i-1], заменяющий [i] и a [i-1].

f = [10, 25, 50, 50, 75, 100, 1000, 1000, 1100, 1100]
a = [1, 3, 2, 4, 5, 3, 10, 15, 5, 5]

Мой желаемый результат:

f = [10, 25, 50, 75, 100, 1000, 1100]
a = [1, 3, 6, 5, 3, 25, 10]

Я считаю, что какое-то понимание списков было бы оптимальным подходом, но я пока не мог понять это.Мне не нужно понимать список, я счастлив, если есть какое-то решение.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Для первого массива:

for i in range(1, len(f)-2):
    if f[i] == f[i-1]:
        del f[i]

print(f)
0 голосов
/ 01 марта 2019

Вы можете zip списки вместе, используйте groupby, чтобы сгруппировать пары по значениям f, а затем суммировать значения a для каждой группы.Затем вам просто нужно разархивировать их обратно в отдельные списки

from itertools import groupby
from operator import itemgetter

groups = groupby(zip(f, a), key=itemgetter(0))
f_a_generator = ((k, sum(map(itemgetter(1), pairs))) for k, pairs in groups)
f1, a1 = zip(*f_a_generator)  # map(list, ...) If you need them as lists

print(f1, a1, sep='\n')
# (10, 25, 50, 75, 100, 1000, 1100)
# (1, 3, 6, 5, 3, 25, 10)

Чтобы ответить на ваш вопрос в комментариях, вы можете изменить строку

sum(map(itemgetter(1), pairs)))

, чтобы вызывать какую-то функцию, отличную от sum:

def logarithmic_sum(values):
    return 10*np.log10(sum((10**(val/10)) for val in values))

groups = groupby(zip(f, a), key=itemgetter(0))
f_a_generator = ((k, logarithmic_sum(map(itemgetter(1), pairs))) for k, pairs in groups)
f1, a1 = zip(*f_a_generator)

print(f1, a1, sep='\n')
# (10, 25, 50, 75, 100, 1000, 1100)
# (1.0000000000000002, 2.999999999999999, 6.124426027943397, 5.0, 2.999999999999999, 16.193310480660944, 8.010299956639813)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...