迭代地将函数应用于数组

Iteratively apply a function to an array

我想创建一个数组,其中包含 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)]

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])
为什么你的代码失败

您没有对数组做任何事情,只是将其用作 0 的生成器。所以条件 i < 100 总是 True 并且 x 总是 1。你的 i = i+1 在每个循环中被 0 覆盖。