python理解合并生成所有3位数字

2024-03-28 22:41:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在进行矩阵编码的练习,并且已经完成了这个任务:编写一个过程,所有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}

我想这更优雅,但需要额外的表达。我想知道是否有一种方法可以让这两个世界都得到最好的结果——一种理解,它不需要像第二种解决方案那样在单独的语句中赋值变量,但是要添加的数字列表不会像第一种解决方案那样重复。你知道吗


Tags: inforbasereturndef矩阵数字all
1条回答
网友
1楼 · 发布于 2024-03-28 22:41:26

这些中间列表使代码非常长。不需要这样:

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)}

相关问题 更多 >