如何按指定规则生成列表?

时间:2017-10-21 23:34:16

标签: python python-3.x

如何按指定的规则有效地生成列表?

规则:

  • 数字20出现在列表中的第2步
  • 数字40出现在列表中的第4步
  • 数字60出现在列表中的步骤8
  • 数字80出现在列表中的步骤16

长度为15的列表的最终结果应如下所示:

rules_power = 2
n1 = 20
n1_step = 2

n2 = 40
n2_step = 4

n3 = 60
n3_step = 8

n4 = 80
n4_step = 16

"步骤"规则永远是某种东西的力量。在这个例子中是2的幂。

所以,让我们说它写成:

df.replace

我们如何有效地生成这样的列表?

1 个答案:

答案 0 :(得分:1)

由于您提到步骤规则始终是权力,因此有一条规则可以找到每个元素的起始位置(第一次出现)。

[20,40,20,60,20,40,20,80,20,40,20,60,20,40,20]
 0  1     3           7

如您所见,每个新元素(20, 40, 60, 80)首先显示在(2 ** i - 1)的位置。知道了这一点,就可以使用索引和步骤轻松填充空列表。

length = 15
lst = [0] * length # better use comprehension

for i in xrange(2 ** 0 - 1, length, n1_step):
    lst[i] = n1

for i in xrange(2 ** 1 - 1, length, n2_step):
    lst[i] = n2

for i in xrange(2 ** 2 - 1, length, n3_step):
    lst[i] = n3

for i in xrange(2 ** 3 - 1, length, n4_step):
    lst[i] = n4

print lst

将电源替换为其他情况,并使用printxrange替换python 3。

如果将值和步骤存储在列表中,则可以使用两个嵌套的for循环执行此过程,无论有多少规则。

这个的复杂性是O(2n), therefore n,应该足够了,但是因为我不知道原来的问题,我不能给更多。