Python从另一个列表创建特定列表

时间:2015-06-28 22:08:40

标签: python list for-loop reverse enumerate

学习python我遇到了以下问题。我已经有一些带整数的列表(例如initial_list)。然后我尝试使用以下数字模式创建列表(例如result):

result[len(result) - 1] = 1
result[i] = result[i + 1] * initial_list[i]

示例:

initial_list = [2, 2, 2, 2, 3, 2, 2]
result = [192, 96, 48, 24, 12, 4, 2, 1]

这是我的第一个实现:

import numpy as np
initial_list = [2, 2, 2, 2, 3, 2, 2]
result = [1]
for number in reversed(initial_list):
    result.append(result[-1] * number)
result = np.array(result[::-1])

这是我的第二个实施:

import numpy as np
initial_list = [2, 2, 2, 2, 3, 2, 2]
result = np.ones(len(initial_list) + 1)
for i, number in enumerate(reversed(initial_list)):
    result[len(result) - i - 2] = result[len(result) - i - 1] * number

我猜第二个更好,因为它不包含append方法并初始化具有大小的列表。 result = np.ones(len(initial_list) + 1)也包含浮点数,这是不正确的。我想知道这个算法的实现是否有更简单的版本。

在该算法之后,我正在创建OrderedDict

from collections import OrderedDict
ordered_dict = OrderedDict(zip(other_list, result))

也许我可以在为result创建OrderedDict期间反复O(1)列表“就像reversed用于循环一样,以便我可以简化上面的算法。” / p>

3 个答案:

答案 0 :(得分:4)

如果numpy是一个选项,则可以使用cumprod

执行此操作
console.dir(myResponseData);

答案 1 :(得分:3)

您可以使用itertools.accumulateoperator.mul

>>> from itertools import accumulate
>>> from operator import mul
>>> a = [2, 2, 2, 2, 3, 2, 2]
>>> list(accumulate(reversed(a + [1]), mul))[::-1]
[192, 96, 48, 24, 12, 4, 2, 1]

答案 2 :(得分:0)

为什么你不能做

result = [0] * len(initial_list)
result[-1] = 1
for i in xrange(len(result) - 2, -1, -1):
  result[i] = result[i + 1] * initial_list[i]