关于Python脚本编写中,for循环和while循环的使用

最近在看一个项目的数据处理脚本,里面有一个需求是这样的:

我们要对一组数据进行排序,数据的格式是这样的

file_example = [[1, 1, 1, 'NULL', 1, 'context'],
                [1, 2, 1, 'NULL', 2, 'context'],
                [1, 1, 2, 'NULL', 1, 'context'],
                [3, 2, 1, 'NULL', 1, 'context'],
                [1, 1, 2, 'NULL', 1, 'context'],
                [1, 3, 1, 'NULL', 1, 'context'],
                [2, 2, 2, 'NULL', 1, 'context'],
                [1, 2, 1, 'NULL', 2, 'context'],
                [1, 3, 2, 'NULL', 1, 'context'],
                [1, 2, 2, 'NULL', 1, 'context'],]

对多维数组进行按列排序,使从左到右一样的在一起,其中跳掉第4列以及最后一列。

原本的代码是写成这样的:

for i in range(len(file_example)-1, 0, -1):
    for j in range(0, i, 1):
        v1 = file_example[j]
        v2 = file_example[j+1]
        result = 0
        for k in range(5):
            if k == 3:
                k += 1
            if v1[k] == v2[k]:
                result = 0
            else:
                try:
                    if v1[k] > v2[k]:
                        result = 1
                    else:
                        result = -1
                except Exception as e:
                    print('Error',k)
        if result == 1:
            file_example[j] = v2
            file_example[j+1] = v1

但是单步调试的时候发现,在判断 k==3 为真的时候执行的 k+=1,并没有真正的改变循环中的循环变量k,事实上在 +=1 后会比较一次 k=4 的值,而在返回到循环条件的判断时,k依旧是从3增加到4,这样就又会执行一次 k=4 的值得比较,数据少的时候没什么感觉,但是对于大量的数据,这样的操作会浪费很多时间。

而在while循环中,循环变量的变更实在循环体之内的,这样就给了我们在循环体内真正变更的机会,所以我把代码改了一下,变成了下面这个样子:

for i in range(len(process_file)-1, 0, -1):
    for j in range(0, i, 1):
        v1 = process_file[j]
        v2 = process_file[j+1]
        result = 0
        k = 0
        while k < 5:
            if k == 3:
                k += 1
            if v1[k] == v2[k]:
                result = 0
            elif v1[k] > v2[k]:
                result = 1
                break
            else:
                result = -1
                break
            k += 1
        if result == 1:
            process_file[j] = v2
            process_file[j+1] = v1

这样的执行的时候每一轮的比较就会少一次,也就节省了时间。

大概就是下面这样的感觉了吧

【end】……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值