问题描述
给定以下来自 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 中所示的简单操作。