例如,我有一个带有浮点数的列表
numbers = [1000.45,1002.98,1005.099,1007.987]
我想创建一个新列表,其中包含数字中的值的增量-即,我希望number [0],[numbers [1]之间的差是新列表中的第一个值。因此,新列表中的第一个数字应为2.53,第二个数字应为2.119,依此类推。
我尝试了列表理解
newnumbers= [i[-1] - i[-2] for i in numbers]
但是它给出了TypeError
TypeError: 'float' object is not subscriptable
我尝试将列表转换为整数,但是随后出现相同类型的错误。
如何创建所需列表?
答案 0 :(得分:3)
使用熊猫很容易,请使用diff()
:
import pandas as pd
pd.Series(numbers).diff()
0 NaN
1 2.530
2 2.119
3 2.888
dtype: float64
答案 1 :(得分:1)
您有正确的主意,但语法还不正确。您应该使用:
newnumbers = [(numbers[i] - numbers[i-1]) for i in range(1, len(numbers))]
在您的版本中,您尝试为数字编制索引,但您需要为列表编制索引。
答案 2 :(得分:1)
newnumbers = []
for i in range(1,len(numbers)-1):
newnumbers.append(numbers[i]-numbers[i-1])
答案 3 :(得分:0)
for i in numbers
在第一个循环中等于1000.45,然后等于1002.98,依此类推。因此i[-1] = 1000.45[-1]
意味着没有意义,您不能下标浮点数
numbers = [1000.45,1002.98,1005.099,1007.987]
newnumbers= [numbers[i+1]-numbers[i] for i in range(len(numbers)-1)]
print(newnumbers)
#[2.5299999999999727, 2.119000000000028, 2.88799999999992]
如果要小数点后2位
newnumbers= [float("%0.2f"%(numbers[i+1]-numbers[i])) for i in range(len(numbers)-1)]
#[2.53, 2.12, 2.89]
答案 4 :(得分:0)
注意如何直接 访问元素,而不使用列表索引; 在Python中执行后者的正确方法是
for index in range(len(numbers)):
您使用的实际上是数字本身。另外,请注意,您必须排除列表的第一个索引,因为您只想要差异(否则,根据Python调用mylist[-1]
的行为,第一个调用将再次查看最后一个索引),这就是为什么您可以将范围限制为range(1,len(numbers))
的原因。现在,以列表理解的方式可以像这样工作:
newnumbers = [numbers[i] - numbers[i-1] for i in range(1,len(numbers))]
答案 5 :(得分:0)
这是不需要导入任何模块的方法:
numbers = [1000.45,1002.98,1005.099,1007.987]
sliced = numbers[1:]
answer = list(map((lambda x,y: y - x),sliced,numbers))
这给出了:
[-2.5299999999999727, -2.119000000000028, -2.88799999999992]
您可以执行以下操作:
final_answer = [round(x,2) for x in answer]
给出:
[-2.53, -2.12, -2.89]
答案 6 :(得分:0)
>>> numbers = [1000.45,1002.98,1005.099,1007.987]
>>> [round((y-x),2) for x,y in zip(numbers, numbers[1:])]
[2.53, 2.12, 2.89]