Итеративно применить функцию к массиву

Я хочу создать массив, содержащий g ^ 0, g ^ 1, g ^ 2.... до g ^ 100, но все до mod50 (извините, если кто-нибудь знает, как отформатировать это, чтобы силы были правильно выровнены, мне нужен небольшая помощь!)

В моем случае g = 23, поэтому мне нужен массив, который выглядит так:

[1,23,29,17...]

Я включил весь свой (неправильный) код внизу для простоты понимания. Я создал пустой массив с 201 элементом. Затем я попытался создать цикл, который сначала принимает i=0, а затем, когда мы перемещаемся по каждому элементу массива, помещает новое значение i как степень x. Я не знаю, является ли это просто кодом, в котором я сделал ошибку, или мне нужно подойти к этому с другой логикой, но независимо от того, любая помощь будет оценена!

n = 101
array = [0] * n
g = 23
i = 0 

for i in array:
    if i<100:
        x = g**i
        print(x%50)
        i = i + 1

array

Это вывод, который я получаю из этого кода:

[1,1,1,1,1...]

На этот первоначальный вопрос был дан ответ ниже

Мне было интересно, можно ли применить ту же логику, когда вместо g ^ i в качестве требуемых выходов это будет h (g ^ (-in)) с h = 20, n = 18 и g = 23, как раньше. Я пробовал это и получаю неверные значения в своем массиве, код, который я пробовал:

h = 20
n = 18
g = 23
array2 = [h*(g**((-i)*n))%500 for i in range(100+1)]

Этот код не «возвращает» то, что вы утверждаете.

Scott Hunter 17.03.2022 16:48

@ScottHunter извините, я забыл строку, которую я сейчас включил в редактирование

ThomasL123 17.03.2022 16:49

Переменная яя> изначально будет равна нулю, вы добавите к ней 1, затем она снова станет нулевой, когда будет получено следующее значение из множество. Любое значение, возведенное в степень 0, равно 1

Lancelot du Lac 17.03.2022 17:01
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

IIUC, вы можете использовать понимание списка:

g = 23
out = [g**i%50 for i in range(100+1)]

выход:

[1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1]

Или, может быть, лучше, используя numpy:

import numpy as np
a = 23**np.arange(100+1)%50

выход:

array([ 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 43, 33, 49,
       17, 13, 29, 47, 15, 41, 15, 19, 13, 21,  9, 39,  9, 25, 25,  9,  1,
        1, 29,  1, 27, 25,  9, 17, 39, 13, 39, 47, 33, 11, 39, 43, 33, 21,
        5, 31, 29, 19,  9, 25, 43,  5, 21, 13, 33, 49, 43,  9, 29, 29, 49,
       33, 15, 21, 11,  3, 37,  7,  7, 41, 27, 31, 33, 37, 39, 45, 17, 45,
       29, 19, 43, 23, 13, 49, 17,  7, 43, 19, 33, 29, 35, 15, 35,  9])
почему ваш код не удался

Вы ничего не делаете со своим массивом, просто используете его как генератор нулей. Таким образом, условие i < 100 всегда истинно, а x всегда равно 1. Ваш i = i+1 перезаписывается на 0 в каждом цикле.

Спасибо, это действительно полезно, я добавил дополнительный вопрос в основной текст (так было проще представить), я не знал, есть ли у вас какие-либо идеи?

ThomasL123 17.03.2022 17:34

Да, вы можете выполнять любые операции с фиксированными переменными таким же образом. Я не знаю, какой результат вы ожидаете. Просто убедитесь, что вы уважаете приоритеты оператора.

mozway 17.03.2022 19:08

Другие вопросы по теме