我有两个我希望平方的列表 以下代码正在运行
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [1, 3, -4, 5, 5, 3, 2, 1, 4, 8, 9]
a_sqrd = []
b_sqrd = []
for i in a:
a_sqrd.append(a[i]*a[i])
b_sqrd.append(b[i]*b[i])
print a_sqrd
print b_sqrd
结果:
[0,1,4,9,16,25,36,49,64,81,100]
[1,9,16,25,25,9,4,1,16,64,81]
但是当我尝试
时a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [1, 3, -4, 5, 5, 3, 2, 1, 4, 8, 9]
a_sqrd = []
b_sqrd = []
for i in a:
a_sqrd.append(a[i]*a[i])
for i in b:
b_sqrd.append(b[i]*b[i])
print a_sqrd
print b_sqrd
结果:
[0,1,4,9,16,25,36,49,64,81,100]
[9,25,1,9,9,25,16,9,25,16,64]
为什么运行两个for循环影响列表b? 我期待与a中相同的结果,我确定有一些明显的遗漏
答案 0 :(得分:4)
使用for elem in testList
迭代列表,这会产生列表的元素,而不是它们的索引。
>>> b = [1, 3, -4, 5, 5, 3, 2, 1, 4, 8, 9]
>>> for i in b:
print i,
1 3 -4 5 5 3 2 1 4 8 9 # Whereas you expected 0 1 2 3 4 5 6 7 8 9 10
因此,您的代码使用值作为索引来获取元素,并返回这些值的平方。这就是发生的事情 -
>>> for index, val in enumerate(b): # enumerate yields an (index, value) tuple which gets unpacked.
print '{0} : {1}*{1} = {2}'.format(index, val, val**2)
0 : 1*1 = 1
1 : 3*3 = 9
2 : -4*-4 = 16
3 : 5*5 = 25
4 : 5*5 = 25
5 : 3*3 = 9
6 : 2*2 = 4
7 : 1*1 = 1
8 : 4*4 = 16
9 : 8*8 = 64
10 : 9*9 = 81
在您的初始代码中, a
列表恰好是您期望的列表,它会按照您的观察结果构建正确的列表。
更轻松的解决方案 -
您可以使用列表推导来构建列表,例如(如果您正在查找它的正方形,则无需自己乘以数字,只需使用内置指数运算符(**
))
>>> [elem**2 for elem in a]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> [elem**2 for elem in b]
[1, 9, 16, 25, 25, 9, 4, 1, 16, 64, 81]
使用map
的解决方案。
>>> map(lambda x: x**2, a)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> map(lambda x: x**2, b)
[1, 9, 16, 25, 25, 9, 4, 1, 16, 64, 81]
答案 1 :(得分:2)
您可以更轻松地使用列表理解:
>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a_sqrd=[e*e for e in a]
>>> a_sqrd
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> b = [1, 3, -4, 5, 5, 3, 2, 1, 4, 8, 9]
>>> b_sqrd=[e*e for e in b]
>>> b_sqrd
[1, 9, 16, 25, 25, 9, 4, 1, 16, 64, 81]
答案 2 :(得分:0)
此代码没有按照您的想法执行:
for i in a:
...
因为i
值是数组中的实际值。
您没有注意到,因为第一个数组中的数组值为0,1,2,3,4,5...
。
因此,在您的代码中,您需要将其更改为:
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [1, 3, -4, 5, 5, 3, 2, 1, 4, 8, 9]
a_sqrd = []
for i in a:
a_sqrd.append(i**2)
print a_sqrd
或打扰他们;
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [1, 3, -4, 5, 5, 3, 2, 1, 4, 8, 9]
a_sqrd = []
b_sqrd = []
for i, j in zip(a, b):
a_sqrd.append(i**2)
b_sqrd.append(j**2)
print a_sqrd
print b_sqrd