计算两个列表项之间的系数差异

粗鲁

我有以下问题,但似乎找不到答案。我的Python知识是基础知识,我现在正在使用2.7.2和2.6.5版本。

假设我有以下列表:

list1 = [1642842,780497,1506284,1438592,1266530,1154853,965861,610252,1091847,1209404,1128111,749998]

我想知道每2个项目的因数差异(项目0,1项目1,2项目2,3等)。

输出应如下所示(但最好四舍五入到小数点后1位):

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

但是我为解决上述问题而不知所措吗?我用上面的代码尝试了几件事,但似乎无法获得良好的结果。

还要注意,尽管我将首先过滤list1中的数据,但它将包含跟随零值的值,这在以前给了我dividbyzero问题。

编辑:感谢您的解决方案,大多数解决方案正是我想要的。不幸的是,这些列表中的项目具有固定的位置。我无法舍弃这些信息,因此从列表中过滤掉某些项目以防止出现诸如“ ZeroDivisionError:浮点除以零”之类的错误并不是真正的选择。为了进一步说明,可能会有以下格式的列表:

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

等等。

上次编辑:无论如何,我将过滤数据而不是创建要解决的问题。感谢所有的答案!

懒惰

一种可能的方式:

list1 = [1642842,780497,1506284,1438592,1266530,1154853,965861,610252,1091847,1209404,1128111,749998]
list2 = [(i, a, b, (1.0*a)/b) for (i, (a, b)) in enumerate(zip(list1, list1[1:]))]
for i, a, b, f in filter(lambda (i, a, b, f): f > 1.5, list2):
    print 'item {0} ({1}), {2} ({3}) value {4:.1f}'.format(i, a, i+1, b, f)

输出:

item 0 (1642842), 1 (780497) value 2.1
item 6 (965861), 7 (610252) value 1.6
item 10 (1128111), 11 (749998) value 1.5

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章