将整数除以列表以创建新列表

时间:2017-03-22 09:42:22

标签: python list range

我已经在指定范围内创建了一个数字列表。我现在想要按列表中的每个元素划分值,然后将该新值添加到新列表中。 继承人我得到了什么:

Y = []
value = 55 #can be any value of my choosing
newx = list(range(50,500,10))
newy = value/(newx)**2
Y.append(newy)

我继续使用不支持的操作数类型为**或pow()获取TypeError:list和int,我不知道为什么。注意:**是幂的语法,即1 /(x ^ 2)

3 个答案:

答案 0 :(得分:2)

一个"清洁"这样做的选择是使用numpy数组:

import numpy as np
value = 55 #can be any value of my choosing
Y = np.arange(50,500,10)
Y = value/(Y)**2

你得到一个错误,因为在python中你不能取一个列表的正方形(你也不能在列表中分配一个数字)。 numpy数组允许你取一个正方形并进行这种除法和许多其他数学运算。

答案 1 :(得分:0)

您的描述说明了您希望做什么:按列表中的每个元素划分值。但这不是你真正在做的事情,而是试图通过列表本身划分价值。你应该做你想说的话:

Y = [value/v for v in newx]

(我不明白**是什么,你在任何地方都没有提到。)

答案 2 :(得分:0)

您可以使用list comprehension

newy = [value/x**2 for x in newx]

您得到的错误是因为未定义列表的平方。

虽然定义了numpy.array的平方,但它将是一个新数组,其中包含原始数组中每个元素的平方。

根据您使用的价值和范围,您可能希望先将int转换为float。否则你可以得到0

>>> value = 55
>>> newx = range(50, 500, 10)
>>> [value/x**2 for x in newx]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

但是:

>>> [value/float(x)**2 for x in newx]
[0.022, 0.015277777777777777, 0.011224489795918367, 0.00859375, 0.006790123456790123, 0.0055, 0.004545454545454545, 0.0038194444444444443, 0.003254437869822485, 0.0028061224489795917, 0.0024444444444444444, 0.0021484375, 0.0019031141868512112, 0.0016975308641975309, 0.0015235457063711912, 0.001375, 0.0012471655328798186, 0.0011363636363636363, 0.0010396975425330812, 0.0009548611111111111, 0.00088, 0.0008136094674556213, 0.0007544581618655693, 0.0007015306122448979, 0.0006539833531510107, 0.0006111111111111111, 0.0005723204994797086, 0.000537109375, 0.000505050505050505, 0.0004757785467128028, 0.0004489795918367347, 0.0004243827160493827, 0.00040175310445580715, 0.0003808864265927978, 0.0003616042077580539, 0.00034375, 0.0003271861986912552, 0.00031179138321995464, 0.00029745808545159546, 0.0002840909090909091, 0.00027160493827160494, 0.0002599243856332703, 0.00024898143956541424, 0.00023871527777777777, 0.00022907122032486465]