我有以下问题,但似乎找不到答案。我的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] 删除。
我来说两句