我需要使用该列表的值以及这些值的索引对列表执行计算,例如:
a = [1,2,3,4,5]
b= a[1]*1
但是对于a的所有值,得到:
b = [1,4,9,16,25]
没有for循环可以做到这一点吗?我可以把它放在一个,但它会改变我的代码的结构更糟糕。这意味着各种技能水平的用户都可以使用,因此我愿意为了便于阅读而牺牲速度。
答案 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]