python 双重循环处理

本文探讨了在Python开发中如何优化循环结构,包括使用`itertools`模块简化双重循环,利用推导式展开复杂嵌套数据,以及在已知集合大小时遵循外小内大的循环原则。通过这些方法,可以显著减少代码冗余,提高执行速度。文章还提供了实际代码示例和性能对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序⾔

在开发过程中经常会遇到对可迭代对象进⾏for循环的操作,甚⾄双重编写for循环进⽽找到匹配条件的数据,

某些逻辑上这些操作往往⽆法避免,但可以通过⼀些⽅法使得代码不那么冗余和提升代码效率

循环的情况

1、循环⽐较

双重循环获取对象并进⾏⽐较

>>> a1 = [1, 3, 5, 2, 10]

>>> a2 = [5, 6, 1, 8]

>>> for i in a1:

        for j in a2:
            if i < j:
                print(i,j)

...

(1, 5)

(1, 6)

(1, 8)

(3, 5)

(3, 6)

(3, 8)

(5, 6)

(5, 8)

(2, 5)

(2, 6)

(2, 8)
复制代码

可以通过itertools包对此种循环进⾏优化,不仅使得代码复杂度降低,也提升了执⾏速度

a1 = [1, 3, 5, 2, 10]

a2 = [5, 6, 1, 8]

@count_time
def base_func():

    for i in a1:
        for j in a2:
            if i < j:
                print(i, j)

@count_time
def itertools_func():
    for i in itertools.product(a1, a2):
        if i[0] < i[1]:
            print(i)
            
            
if __name__ == '__main__':
    base_func()
    itertools_func()
    
# 8.106231689453125e-06
# 4.053115844726562e-06
复制代码

2、循环展开

将复杂嵌套数据内容展开,可以使⽤推导式进⾏实现

@count_time

def base_func():

    result = []
    for a in a1:
        for j in a:
            result.append(j)

@count_time
def itertools_func():
    value = [i for value in a1 for i in value]

if __name__ == '__main__':
    print(base_func())
    print(itertools_func())

# 8.106231689453125e-06
# 4.053115844726562e-06
复制代码

3、已知集合⼤⼩

在已知集合⼤致数量进⾏双重for循环处理数据时,应该采⽤外⼩内⼤的原则,把⼤循环写在⾥⾯,⼩循环写在外边

@count_time
def outer_func():

    for i in range(10):
        for j in range(10000): 
            if i == j:
                print(i, j)

@count_time
def inner_func():

    for i in range(10000):
        for j in range(10):
            if i == j:
                print(i, j)

# 0.003239154815673828
# 0.004751205444335937
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值