Python如何同时进行两个循环
伊谢尔伦
伊谢尔伦 2017-04-18 09:24:44
[Python讨论组]

想写这样一个逻辑

for i in lit:
    for j in lit:
        do_something(i, j)

但是感觉这样写好丑,有没有比较优美的写法?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(4)
阿神

itertools 的笛卡尔积

from itertools import product

for i, j in product(lit, lit):
    do_something(i, j)

product 返回一个生成器,能 yield 出传入数组形成的笛卡尔积。
product 可以接受任意多个数组。

PHP中文网

我来补上一刀:

# coding=utf-8
def unique_pairs(n):
    """一个贱贱的生成器"""
    for i in n:
        for j in n:
            yield i, j


lit = "hey!"
for i, j in unique_pairs(lit):
    print(i, j)

unique_pairs接收一个可迭代的对象, 返回一个生成器, 能输出接收迭代对象所有迭代元素可能的笛卡尔积
本质上还是双重循环, 但是自我感觉良好, 可复用

代码输出:

('h', 'h')
('h', 'e')
('h', 'y')
('h', '!')
('e', 'h')
('e', 'e')
('e', 'y')
('e', '!')
('y', 'h')
('y', 'e')
('y', 'y')
('y', '!')
('!', 'h')
('!', 'e')
('!', 'y')
('!', '!')
迷茫

最近刷了一道leetcode的题目【two sum】,感觉思路很好哇,也和循环有关系。
Giver numers=[2, 7, 11, 15],target=9, because 2+7=9, then return indexs [0,1].
刚开始,想用2重循环做的,发现时间超时(时间复杂度太高)
然后想一下1重循环也可以搞定的,每次记录下你得到的信息(使用map了),减小了时间复杂度。
最好不要用2重循环,感觉好浪费时间哦~

怪我咯

izip 不行?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号