我正在进行矩阵编码的练习,并且已经完成了这个任务:编写一个过程,所有3位数字(base,digits),其中输入是一个正整数基,数字是集合{0,1,2,…,base-1},输出是所有3位数字的集合,其中基是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}
我想这更优雅,但需要额外的表达。我想知道是否有一种方法可以让这两个世界都得到最好的结果——一种理解,它不需要像第二种解决方案那样在单独的语句中赋值变量,但是要添加的数字列表不会像第一种解决方案那样重复。你知道吗
这些中间列表使代码非常长。不需要这样:
如果你想更花哨一点,可以使用itertools:
相关问题 更多 >
编程相关推荐