使用列表中的值和该值的索引进行计算?

时间:2015-09-22 02:23:18

标签: python list indexing

我需要使用该列表的值以及这些值的索引对列表执行计算,例如:

a = [1,2,3,4,5]

b= a[1]*1

但是对于a的所有值,得到:

b = [1,4,9,16,25]

没有for循环可以做到这一点吗?我可以把它放在一个,但它会改变我的代码的结构更糟糕。这意味着各种技能水平的用户都可以使用,因此我愿意为了便于阅读而牺牲速度。

2 个答案:

答案 0 :(得分:4)

您可以使用list comprehension和enumerate()函数,它同时提供元素的索引和值。示例 -

b = [elem * (i+1) for i, elem in enumerate(a)]

演示 -

>>> a = [1,2,3,4,5]
>>> b = [elem * (i+1) for i, elem in enumerate(a)]
>>> b
[1, 4, 9, 16, 25]

如果使用numpy库很好,最有可能更快的解决方案是使用numpy的矢量化乘法。示例 -

In [1]: import numpy as np

In [2]: a = [1,2,3,4,5]

In [3]: a_arr = np.array(a)

In [4]: b = a_arr * np.arange(1,a_arr.shape[0]+1)

In [5]: b
Out[5]: array([ 1,  4,  9, 16, 25])

虽然numpy方法可能有点复杂,以理解列表理解。

答案 1 :(得分:0)

我建议您使用map内置函数,让代码更简单。

a =  [1,2,3,4,5]

b = map(lambda x: x*x, a)

print b
# [1, 4, 9, 16, 25]

如果要动态输入列表,可以使用range内置函数(它可用于python2):

b = map(lambda x: x*x, range(1,6))

print b
# [1, 4, 9, 16, 25]