gpt4 book ai didi

python理解合并生成all_3_digit_numbers

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:17 25 4
gpt4 key购买 nike

我正在完成矩阵编码中的练习,并已完成此任务:编写一个过程 all_3_digit_numbers(base,digits),其中输入是正整数基数,digits 是集合 {0, 1,2 , ..., base-1},输出是所有三位数的集合,其中基数为base。我想出了一个解决方案:

def all_3_digit_numbers(base, digits): return {a+b+c for a in [d*base**2 for d    in digits] for b in [d*base**1 for d in digits] for c in [d*base**0 for d in digits]}

适合一行。但我认为表达式 d*base**exp 的重复可以合并。所以我也有这个解决方案:

def all_3_digit_numbers(base, digits):
[alist,blist,clist] = [[digit*base**exp for digit in digits] for exp in [0,1,2]]
return {a+b+c for a in alist for b in blist for c in clist}

这更优雅(我猜),但需要额外的表达。我想知道是否有一种方法可以两全其美 - 不需要像第二个解决方案那样在单独的语句中进行变量赋值的理解,但是要添加的数字列表不会像在中那样重复第一个解决方案。

最佳答案

这些中间列表使代码变得非常长。没必要这样:

def all_3_digit_numbers(base, digits): 
return {a*base**2 + b*base + c for a in digits for b in digits for c in digits}

如果您想更花哨一点,请使用 itertools :

from itertools import product

def all_3_digit_numbers2(base, digits):
return {a*base**2 + b*base + c for a, b, c in product(digits, repeat=3)}

关于python理解合并生成all_3_digit_numbers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42740855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com