我有一个问题,但找不到答案。我的Python知识较基础,目前使用版本为2.7.2和2.6.5。
假设我有以下列表:
list1 = [1642842,780497,1506284,1438592,1266530,1154853,965861,610252,1091847,1209404,1128111,749998]
我想知道每两个项目之间的因子差异(第0,1项,第1,2项,第2,3项等)。
输出应该像这样(但最好四舍五入到小数点后一位):
list2 = [2.1048665145,0.5181605859,1.047054342,1.1358530789,1.0967023509,1.195672048, 1.5827248415,0.5589171377,0.9027975763,1.0720611713,1.5041520111]
我需要的最终结果是:当因子大于1.5时,我想报告2个列表项的编号及其因子值。
列表项0,1 值为2.1
列表项6,7 值为1.6
列表项10,11 值为1.5
我该如何做?
可以使用以下代码轻松找到数字差异:
print numpy.diff(list1)
或者
for i in (abs(x - y) for (x, y) in zip(list1[1:], list1[:-1])):
print i
但是我正在努力寻找解决上述问题的方法?我尝试了一些上面的代码,但似乎无法得到好结果。
还要注意的是,虽然我将首先过滤列表1中的数据,但它将包含导致我之前出现除以零问题的后续零值。
编辑:感谢解决方案,它们中的大多数都能够完全符合我的要求。不幸的是,这些列表中的项目有一个固定的位置。我不能丢弃这些信息,因此过滤掉列表中的某些项目以防止出现“ZeroDivisionError: float division by zero”等错误并不是真正的选择。为了更好地解释一下,可能会有以下格式的列表:
list1 = [0,0,0,0,0,0,0,0,2,5,65,456,456456,456564,456666,666666,2344,233,232,122,88,6,0,0,0,0]
以下是关于解决此问题的Pythonic方法的任意解决方案,请注意输出格式:
第0个项目,第1个项目的值为0
第1个项目,第2个项目的值为0
第2个项目,第3个项目的值为0
等等。
第8个项目,第9个项目的值为2.5
第9个项目,第10个项目的值为13
等等。
最后编辑:无论如何,我都会过滤数据,而不是创建问题以修复它们。感谢所有答案!
pairwise
是一个相当通用的函数,可能在其他地方也有用。人们可以立即看出它是做什么的以及如何工作的。对于其他答案,我不能说同样的话。如果您将最后一个列表推导式替换为生成器,则此答案也适用于可迭代对象而无需列表开销。 - D K