使用标准输出在同一行打印列表
Printing lists on the same line using stdout
我正在尝试使用标准输出而不是打印来获取 BST 的输出。问题是标准输出显示的值似乎变得混乱。
我尝试过 sys.stdout.write(' '.join(str(x) for x in str(node.data)))
之类的事情。和 sys.stdout.write(str(node.data))
。代码如下。
import sys
class Node:
def __init__(self, d):
self.data = d
self.left = None
self.right = None
# function to convert sorted array to a
# balanced BST
# input : sorted array of integers
# output: root node of balanced BST
def sort_array_to_bst(arr):
if not arr:
return None
# find middle
mid = (len(arr)) / 2
mid = int(mid)
# make the middle element the root
root = Node(arr[mid])
# left subtree of root has all
# values <arr[mid]
root.left = sort_array_to_bst(arr[:mid])
# right subtree of root has all
# values >arr[mid]
root.right = sort_array_to_bst(arr[mid + 1:])
return root
# A utility function to print the preorder
# traversal of the BST
def pre_order(node):
if not node:
return
#sys.stdout.write(' '.join(str(x) for x in str(node.data)))
# Output : 5 71 5 78 9 83 9 72 61 7 86 7 9
#sys.stdout.write(str(node.data))
# Output: 5715789839726178679
#print(node.data, end=" ")
pre_order(node.left)
pre_order(node.right)
arr = [7, 898, 157, 397, 57, 178, 26, 679]
root = sort_array_to_bst(arr[1:])
pre_order(root)
预期输出为 57 157 898 397 26 178 679
。
但是正如在 sys.stdout.write(' '.join(str(x) for x in str(node.data)))
的代码中注释掉的那样,我得到了输出 5 71 5 78 9 83 9 72 61 7 86 7 9
对于 sys.stdout.write(str(node.data))
,我得到输出 5715789839726178679
。
有没有办法实现这个?
您正在 str(node.data)
上调用 ' '.join()
,这意味着它将占用 57
并在 57
的每个字符之间加入一个 space。只需尝试在 pre_order()
函数中用 sys.stdout.write(str(node.data) + ' ')
替换标准输出。
在遍历 node.data
之前,您不应该将其转换为字符串;否则你将遍历字符串的各个字符。
变化:
sys.stdout.write(' '.join(str(x) for x in str(node.data)))
至:
sys.stdout.write(' '.join(str(x) for x in node.data))
我正在尝试使用标准输出而不是打印来获取 BST 的输出。问题是标准输出显示的值似乎变得混乱。
我尝试过 sys.stdout.write(' '.join(str(x) for x in str(node.data)))
之类的事情。和 sys.stdout.write(str(node.data))
。代码如下。
import sys
class Node:
def __init__(self, d):
self.data = d
self.left = None
self.right = None
# function to convert sorted array to a
# balanced BST
# input : sorted array of integers
# output: root node of balanced BST
def sort_array_to_bst(arr):
if not arr:
return None
# find middle
mid = (len(arr)) / 2
mid = int(mid)
# make the middle element the root
root = Node(arr[mid])
# left subtree of root has all
# values <arr[mid]
root.left = sort_array_to_bst(arr[:mid])
# right subtree of root has all
# values >arr[mid]
root.right = sort_array_to_bst(arr[mid + 1:])
return root
# A utility function to print the preorder
# traversal of the BST
def pre_order(node):
if not node:
return
#sys.stdout.write(' '.join(str(x) for x in str(node.data)))
# Output : 5 71 5 78 9 83 9 72 61 7 86 7 9
#sys.stdout.write(str(node.data))
# Output: 5715789839726178679
#print(node.data, end=" ")
pre_order(node.left)
pre_order(node.right)
arr = [7, 898, 157, 397, 57, 178, 26, 679]
root = sort_array_to_bst(arr[1:])
pre_order(root)
预期输出为 57 157 898 397 26 178 679
。
但是正如在 sys.stdout.write(' '.join(str(x) for x in str(node.data)))
的代码中注释掉的那样,我得到了输出 5 71 5 78 9 83 9 72 61 7 86 7 9
对于 sys.stdout.write(str(node.data))
,我得到输出 5715789839726178679
。
有没有办法实现这个?
您正在 str(node.data)
上调用 ' '.join()
,这意味着它将占用 57
并在 57
的每个字符之间加入一个 space。只需尝试在 pre_order()
函数中用 sys.stdout.write(str(node.data) + ' ')
替换标准输出。
在遍历 node.data
之前,您不应该将其转换为字符串;否则你将遍历字符串的各个字符。
变化:
sys.stdout.write(' '.join(str(x) for x in str(node.data)))
至:
sys.stdout.write(' '.join(str(x) for x in node.data))