Извлекать и сравнивать значения списка в зависимости от их аргументов, взятых из другого списка. - PullRequest
0 голосов
/ 06 августа 2020

У нас есть 2 списка по 10 значений в каждом, как вы можете увидеть здесь пример: Index list: [0, 5, 5, 6, 0, 1, 1, 8, 9, 9] Index list Mfccs : [0.640495, 0.4822588, 0.6523488, 0.74474275, 0.5423001, 0.85711163, 0.724612, 0.5099624, 0.9696293, 0.97258127]

Списки соответствуют друг другу, «Список индексов Mfccs» имеет реальные значения, а «Индекс list "содержит аргументы этих значений.

Мы хотим извлечь наиболее повторяющийся аргумент в" Index list ". Но иногда у нас может быть два или более дубликатов, троек ... как в примере. В случае примера у нас есть четыре дубликата (0, 5, 1 и 9), и мы хотим извлечь и сравнить соответствующие значения в «Index list Mfccs» следующим образом: (0.640495, 0.4822588, 0.6523488, 0.5423001, 0.85711163, 0.724612, 0,9696293, 0,97258127), чтобы выбрать самый большой, здесь 0,97258127.

Примечание: Например, если есть тройной аргумент и 2 дубликата, выбранное значение будет максимальным из три значения утроенного аргумента. То же самое, если есть учетверенный или пятикратный аргумент. Итак, чем выше rodundance, тем выше приоритет.

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Вот еще одно решение, которое должно работать:

index_list = [1, 1, 1, 3, 5, 4, 7, 9, 9, 0]
index_list_mfccs = [0.640495, 0.4822588, 0.6523488, 0.74474275, 0.5423001, 0.85711163, 0.724612, 0.5099624, 0.9696293, 0.97258127]

histogram = dict((n, index_list.count(n)) for n in set(index_list))
result_mfccs = []

for m, n in enumerate(index_list):
    if index_list.count(n) == max (histogram.values()):
        result_mfccs.append(index_list_mfccs[m])
result = max(result_mfccs)
print(result) 
1 голос
/ 06 августа 2020

Хорошо - если вам нужно только наибольшее число из того, что проиндексировано несколько раз, используйте следующее:

index_list = [0, 5, 5, 6, 0, 1, 1, 8, 9, 9]
index_list_mcfccs = [0.640495, 0.4822588, 0.6523488, 0.74474275, 0.5423001, 0.85711163, 0.724612, 0.5099624, 0.9696293, 0.97258127]

result_mcfccs = []

for idx, index in enumerate(index_list):
    if index_list.count(index) > 1:
        result_mcfccs.append(index_list_mcfccs[idx])
    
result = max(result_mcfccs)
print(result)

UPDATE: в соответствии с вашими дополнительными требованиями, чтобы учесть величину В случае возникновения в качестве приоритета решение будет следующим (одинаковая величина индексов будет учитывать ВСЕ значения)

index_list = [0, 5, 5, 6, 0, 1, 1, 8, 9, 9]
index_list_mcfccs = [0.640495, 0.4822588, 0.6523488, 0.74474275, 0.5423001, 0.85711163, 0.724612, 0.5099624, 0.9696293, 0.97258127]

result_mcfccs = []

from collections import Counter

indices = list(map(lambda x: x[0], Counter(index_list).most_common()))
counts = list(map(lambda x: x[1], Counter(index_list).most_common()))

max_indices = [indices[i] for i, x in enumerate(counts) if x == max(counts)]

for idx, id in enumerate(index_list):
    if id in max_indices:
        result_mcfccs.append(index_list_mcfccs[idx])
    
result = max(result_mcfccs)
print(result)
...