Python enumerate() 函数-有一个数组,数组里任意数组合相加为一个固定值

首先我们来了解一下这个问题中应用到的函数

python enuMerate() 函数


enumeeate() 是python中的内置函数,可以直接调用,不用引入。各大python主流网站介绍都差不多

描述

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

Python 2.3. 以上版本可用,2.6 添加 start 参数。

语法

以下是 enumerate() 方法的语法:

enumerate(sequence, [start=0])

参数

  • sequence -- 一个序列、迭代器或其他支持迭代对象。

  • start -- 下标起始位置。

返回值

返回 enumerate(枚举) 对象。


实例

以下展示了使用 enumerate() 方法的实例:

>>>seasons = ['SPring', 'Summer', 'Fall', 'Winter']>>> list(enumerate(seasons))[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]>>> list(enumerate(seasons, start=1))       # 下标从 1 开始[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

普通的 for 循环

>>>i = 0>>> seq = ['one', 'two', 'three']>>> for element in seq: ...     print i, seq[i]...     i +=1... 0 one1 two2 three

for 循环使用 enumerate

>>>seq = ['one', 'two', 'three']>>> for i, element in enumerate(seq): ...     print i, element... 0 one1 two2 three


这个问题我们主要是要用到enumeeate() 函数和for循环结合,解决一般处理数据

有个平常办公过程中比较实用的作用

补充:统计文件行数可以这样写:

count=len(open(filepath,'r').readlines())
这种方法简单,但是可能比较慢,当文件比较大时甚至不能工作。
count=0
for index,line in enumerate(open(filepath,'r')):
    count+=1


————————————————-----------------------------------------------------------

接下来我们来说标题里提到的问题:有一个数组,数组里任意数组合相加为一个固定值,找出这些排列组合的数组具体实例如下

def sum_list(bool_list, n, now_sum):
    if n >= len(sum_l):
        return
    if now_sum + sum_l[n] == sum_num:       #如果原有值加上这个值正好为所求的数
        bool_list[n] = True                 #将在bool_list对应的这个数赋值为true
        for i, j in enumerate(bool_list):
            if j:
                print(sum_l[i], end=' ')   #输出bool_list中所有对应值为true的值
        print('---------------------------')
    bool_list[n] = True                     #如果这个数值数被选
    sum_list(bool_list, n+1, now_sum+sum_l[n])      #原来的now_sum和加上新的被选值
    bool_list[n] = False                    #如果没被选
    sum_list(bool_list, n+1, now_sum)        #原来的now_sum值不变
if __name__ == '__mAIn__':
    sum_l =[1699.00,97.86,60.80,126.55,196.00,327.50,2100.00,21296.00,4818.90,
            8495.59,6001.00,1564.80,5500.00,2986.05,649.00,8414.34,5491.31,
            5255.30,2599.00,40000.00,3382.00,2830.00,4900.00,2800.00,56.00,96.00,
            43387.92,3047.00,13591.00,869.00,296.00,1900.00,4177.20,2152.20,18898.00,
            4579.00,2450.00,1965.00,15000.00,150.00,1423.00,34178.00,208.86,790.00,
            590.00,3984.00,18000.00,267.86,163.86,3157.20,9968.90,29502.00,406.70,
            1563.70,12400.00,6987.95,7089.35,17880.00,15003.00,449.00,39156.52,4849.90,
            853.96,50.70,210.00,198.00,22800.00
]
    sum_num = 66228
    bool_list = [False for i in sum_l]
    sum_list(bool_list, 0, 0)

这个运算的运算量比较大,所以建议小范围使用,电脑本身数字计算能力不强,简单的数组是可以计算的,比较长的数组耗费太多时间。

这个问题源自于今天一个朋友入账时候找不到对应的单据,所以只能这样子排列组合,这么多数据靠人力是找不出答案的。

本文版权归qu快排seo www.SEOguRuBlog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ√61910465