Python如何同时进行两个循环
博亿娱乐平台下载
博亿娱乐平台下载
当前位置 : 博亿娱乐平台下载 > 博亿娱乐平台首页官方网站

Python如何同时进行两个循环

想写这样一个逻辑

for i in lit:
    for j in lit:
        do_somethingi, j

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

itertools 的笛卡尔积

from itertools import product

for i, j in productlit, lit:
    do_somethingi, j

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

我来补上一刀:

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


lit = "hey!"
for i, j in unique_pairslit:
    printi, 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 不行?

广告位

博亿娱乐平台下载