如何将列表的值与其指数的幂相加

时间:2016-11-16 17:58:43

标签: python list python-3.x

如何在Python 3

中将列表的值与其索引的幂相加

示例:

[3, 0, 2] = 3^1 + 0^2 + 2^3 = 11

这个想法是为列表中任何可能的非负数组合创建一个唯一索引。这样,我可以使用列表来计算某事的索引。

编辑:当问题得到解答时,我才意识到该方法不会为列表中的任何非负整数组合创建唯一索引。为此,假设a是可能的整数数,并且基于接受的答案,

sum(a ** i * j for i,j in enumerate(l, 0))

这个想法是每个数字都会使索引增加一个与其在列表中的位置成指数比例的量。假设a=4(从03),上面的示例变为

[3, 0, 2] = 4^0*3 + 4^1*0 + 4^2^2 = 35

指数范围从04^3-1=63

2 个答案:

答案 0 :(得分:8)

使用enumerate获取索引并将其提供给sum

sum(j ** i for i,j in enumerate(l, 1))

start enumerate参数指定为1,确保索引将从1(根据需要)开始,而不是从0开始(默认为你得到一个普通的enumerate):

>>> l = [3, 0, 2]    
>>> sum(j ** i for i,j in enumerate(l, 1))
11

在功能上,您还可以使用map count itertools传递pow {{3}}作为要映射的函数:

>>> from itertools import count
>>> sum(map(pow, l, count(1)))
11

这些几乎在同一时间执行;生成器表达式sum虽然提供了一点灵活性。

答案 1 :(得分:1)

您可以使用numpy执行此操作,这通常比遍历列表更快:

In [1]: import numpy as np

In [2]: l = [0, 3, 4, 1]

In [3]: np.array(l) ** np.arange(len(l))
Out[3]: array([ 1,  3, 16,  1])

In [4]: np.array(l) ** np.arange(1, len(l) + 1)
Out[4]: array([ 0,  9, 64,  1])