#python #list
#python #Список
Вопрос:
Предположим, я составил большой список чисел, и я хочу создать еще один, который я добавлю попарно к первому списку.
Вот первый список, A
:
[109, 77, 57, 34, 94, 68, 96, 72, 39, 67, 49, 71, 121, 89, 61, 84, 45, 40, 104, 68, 54, 60, 68, 62, 91, 45, 41, 118, 44, 35, 53, 86, 41, 63, 111, 112, 54, 34, 52, 72, 111, 113, 47, 91, 107, 114, 105, 91, 57, 86, 32, 109, 84, 85, 114, 48, 105, 109, 68, 57, 78, 111, 64, 55, 97, 85, 40, 100, 74, 34, 94, 78, 57, 77, 94, 46, 95, 60, 42, 44, 68, 89, 113, 66, 112, 60, 40, 110, 89, 105, 113, 90, 73, 44, 39, 55, 108, 110, 64, 108]
И вот B
:
[35, 106, 55, 61, 81, 109, 82, 85, 71, 55, 59, 38, 112, 92, 59, 37, 46, 55, 89, 63, 73, 119, 70, 76, 100, 49, 117, 77, 37, 62, 65, 115, 93, 34, 107, 102, 91, 58, 82, 119, 75, 117, 34, 112, 121, 58, 79, 69, 68, 72, 110, 43, 111, 51, 102, 39, 52, 62, 75, 118, 62, 46, 74, 77, 82, 81, 36, 87, 80, 56, 47, 41, 92, 102, 101, 66, 109, 108, 97, 49, 72, 74, 93, 114, 55, 116, 66, 93, 56, 56, 93, 99, 96, 115, 93, 111, 57, 105, 35, 99]
Как я мог бы сгенерировать логику арифметического сложения, обрабатывая каждое попарное значение одно за другим ( A[0] and B[0]
, через A[99], B[99]
) и создавая список C
( A[0] B[0]
через A[99] B[99]
)?
Комментарии:
1. спасибо за исправления моих английских слов..
Ответ №1:
result = [(x y) for x, y in itertools.izip(A, B)]
Или:
result = map(operator.add, itertools.izip(A, B))
Комментарии:
1. operator.add может быть лучшим выбором, чем sum
2. @ но если я хочу добавить модульное дополнение (пример, 125) и как насчет результата? использование result = [(x y) для x, y в itertools.izip(A, B) 5] не работает
3. @haeaohoh:
[(x y) % 125 for x, y in itertools.izip(A, B)]
. Выражение, которое работает с элементами, всегда находится передfor
.4. @CatPlusPlus, хорошо, теперь я понимаю, я просто хочу создать одноразовый инструмент шифрования для этих вопросов, спасибо 🙂
Ответ №2:
Вот два возможных варианта:
- Используйте понимание списка.
- Используйте NumPy.
Для удобства я буду использовать сокращенные версии ваших списков, а сумма по элементам войдет в c
.
Понимание списка
a = [109, 77, 57, 34, 94, 68, 96]
b = [35, 106, 55, 61, 81, 109, 82]
c = [a_el b_el for a_el,b_el in zip(a, b)]
NumPy
import numpy as np
a = np.array([109, 77, 57, 34, 94, 68, 96])
b = np.array([35, 106, 55, 61, 81, 109, 82])
c = a b
Комментарии:
1. Хм, а затем, если добавить модульное сложение (пример 125), сработает ли c = ((a b)5)?
2. @haeaohoh Да, для опции NumPy вы можете сделать
(a b) % 125
. Было бы неплохо отредактировать ваш вопрос, чтобы включить это требование, если вы его ищете.3. @haeaohoh Конечно, понимание списка также может быть изменено для выполнения модульного сложения:
c = [(a_el b_el) % 125 for a_el,b_el in zip(a, b)]
.4. Спасибо, довольно хорошо работает, это может быть полезно для алгоритмов одноразового использования
Ответ №3:
С пониманием списка:
C = [A[i] B[i] for i in range(len(A))]
И даже безопаснее:
C = [A[i] B[i] for i in range(len(A)) if len(A) == len(B)]
Комментарии:
1. код кажется мне довольно сложным C = [A [i] B[i] для i в диапазоне (len(A)), если len(A) == len(B)]
2. Тогда не используйте это. Я просто предоставляю его для завершения, т. Е. работает только первая строка и предполагается, что длины обоих списков равны, но это не всегда может быть так. То же самое для большинства других опубликованных решений.
3. Никаких проблем со значениями, вы мне очень помогли, спасибо 🙂