反向打印树级别

2024-09-28 03:11:48 发布

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

我有一个密码,它可以打印哈夫曼树。这一部分:

while len(numArr) > 1:
    numArr = [numArr[0] + numArr[1]] + numArr[2:]
    numArr = sorted(numArr)
    valHold = numArr[0] * 8
    print(numArr)

不要介意我用它来计算输入字符串的未压缩位的valHold变量。你知道吗

假设我有1,1,1,2,3,4作为list numArr的元素(元素来自一个计数器,并传输到letter_arr和numArr以将两者分开)。你知道吗

我只能这样打印:

1,1,1,1,2,3,4
1,1,2,2,3,4
2,2,2,3,4
2,3,4,4
4,4,5
5,8
13

有没有其他方法可以打印出来?它看起来更像一棵树?像这样:

13
5,8
4,4,5
2,3,4,4
2,2,2,3,4
1,1,2,2,3,4
1,1,1,1,2,3,4

如果你能教我如何用缩进打印会更好:

     13
     5,8
    4,4,5
   2,3,4,4
  2,2,2,3,4
 1,1,2,2,3,4
1,1,1,1,2,3,4

请注意,numArr列表的元素不是预定义的。它基于用户在程序中输入的内容。你知道吗


Tags: 方法字符串元素密码列表len计数器list
3条回答

当然可以:

tree = []
while len(numArr) > 1:
    numArr = [numArr[0] + numArr[1]] + numArr[2:]
    numArr = sorted(numArr)
    valHold = numArr[0] * 8
    tree.append(numArr)

indent = len(tree)
for row in tree[::-1]:
    print(" " * indent, row)
    indent -= 1

为了按相反的顺序打印,可以先将其放入列表中,然后将其反转。你知道吗

array = []
while len(numArr) > 1:
    numArr = [numArr[0] + numArr[1]] + numArr[2:]
    numArr = sorted(numArr)
    array.append(numArr)
array.reverse()

要缩进输出并将其与每个数字对齐,可能需要一些额外的工作,但您可以尝试将输出作为工作中心。 首先将每个列表转换为一个字符串,并计算最大宽度。然后使用str.center将文本居中。你知道吗

array_str = list(map(lambda level: ','.join(str(i) for i in level), array))
width = max(len(s) for s in array_str)
for s in array_str:
    print(s.center(width))

您可以按如下树格式输出数据:

numArray = [
    [1, 2, 1, 4, 1, 1, 3],
    [2, 4, 1, 3, 2, 1],
    [2, 3, 2, 4, 2],
    [4, 2, 3, 4],
    [5, 4, 4],
    [8, 5],
    [13]]

output = [','.join(str(x) for x in sorted(row)) for row in numArray[::-1]]

for row in output:
    print row.center(len(output[-1]))

这将显示:

      13     
     5,8     
    4,4,5    
   2,3,4,4   
  2,2,2,3,4  
 1,1,2,2,3,4 
1,1,1,1,2,3,4

[::-1]可用于按相反顺序读取数组。所以这里的想法是读取每一行并将每一个元素转换成一个字符串。然后用逗号将它们连接起来,创建一个数字列表。最后,根据最长条目的长度居中显示每一行。你知道吗

相关问题 更多 >

    热门问题