как эффективно сопоставить элементы списка с их значениями? - PullRequest
0 голосов
/ 30 июня 2018

У меня есть список, скажем, list1, и я хочу сопоставить его элементы с соответствующими значениями.

code = ['a','b','c']
value = [1,2,3]             
list1 = ['a','a','b','c','b','b','a','c']

вот код, который я написал.

def codeToValue(code,value,list1):
    list1_out = [0 for i in range(len(list1))]
    for i in range(len(list1)):
        for j in range(len(code)):
            if list1[i] == code[j]:
                list1_out[i] = value[j]
    return list1_out

и я получил желаемый результат.

print(codeToValue(code,value,list1))
[1, 1, 2, 3, 2, 2, 1, 3]

этот код подходит для небольших размеров списков, но когда я запускаю его с большими размерами списков, это занимает слишком много времени из-за двух циклов. Пожалуйста, предложите что-нибудь, чтобы повысить эффективность использования времени. Любые предложения будут с благодарностью.

1 Ответ

0 голосов
/ 30 июня 2018

Вы можете использовать dict (созданный благодаря zip()) и понимание списка :

mapping = dict(zip(code, value))
out = [mapping[v] for v in list1]

Об эффективности: этот фрагмент извлекает выгоду из * dict-поиска O(1) (хотя вам все равно необходимо сначала выполнить итерации по значениям dict), и, поскольку известно, что списки выполняются быстрее, чем обычные for, вы должны ожидать более высокую производительность с этим кодом.

Если это все еще слишком медленно для вашего использования, вам, вероятно, следует использовать специализированную библиотеку для обработки больших данных, такую ​​как pandas.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...