微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Python 中使用两个 foo 循环扩展列表理解?

如何解决如何在 Python 中使用两个 foo 循环扩展列表理解?

给定以下来自 Leetcode 的代码

def combine(self,n: int,k: int) -> List[List[int]]:
    combs = [[]]
    for _ in range(k):
        combs = [[i] + c for c in combs for i in range(1,c[0] if c else n+1)]
    return combs

如何扩展内部 combs 循环以提高可读性?我在下面尝试过,但我遇到了关于 c[0] 部分的索引越界的错误,所以我知道我做错了什么,但我在类似的列表理解中找不到与此足够相似的问题以了解我实际上做错了什么。

for c in combs:
            if c:
                for i in range(1,c[0]):
                    combs.extend([i] + c)
            else:
                for i in range(1,n+1):
                    combs.extend([i] + c)

有什么想法吗?

解决方法

一旦你习惯了它们,列表理解本身就非常易读。例如,我更喜欢它,但会在那里添加至少一个换行符。 '+' 周围有一致的空格。

def combine2(n: int,k: int):
    combs = [[]]
    for _ in range(k):
        tmp_combs = []
        for c in combs:
            for i in range(1,c[0] if c else n + 1):
                tmp_combs.append([i] + c)

        combs = tmp_combs
    return combs

为了帮助更好地理解它,这与 for 循环等效,我想您是在追求:

add_action('wp_footer','mobile_checkout');
function mobile_checkout() {
    if ( wp_is_mobile() && is_checkout() ) {
        remove_action( 'woocommerce_checkout_order_review','woocommerce_order_review',10 );
        add_action( 'woocommerce_before_checkout_billing_form',1 );
    }
}

另外,虽然这两个函数的结果相同,但它们在性能上有一些差异。列表推导要快一些,尤其是对于此 post 中所示的简单操作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?