python 双重循环处理

序⾔

在开发过程中经常会遇到对可迭代对象进⾏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
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python双重循环的简写可以使用列表推导式。列表推导式可以在一行代码中实现双重循环的功能。具体的语法是在一个方括号内使用两个for循环,并在内层循环中添加一个表达式来构建新的列表元素。例如,下面是一个简写双重循环的示例代码: ```python result = [i * j for i in range(5) for j in range(10) if j > 5] ``` 这个代码将会生成一个包含符合条件的元素的列表。在这个例子中,我们遍历了两个范围分别是0到4和0到9的循环,并计算了它们的乘积。最后,我们通过添加一个判断条件`if j > 5`过滤掉了不符合条件的元素。结果是一个包含了满足条件的元素的列表。 所以,Python双重循环的简写就是使用列表推导式来实现的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [python语法 3.1 双重for循环](https://blog.csdn.net/Paulliam/article/details/79368642)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Python列表循环遍历示例.md](https://download.csdn.net/download/qq_42431718/88241265)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值