【问题标题】:How to get rid of trailing whitespace printing a list using stdout python3如何摆脱使用 stdout python3 打印列表的尾随空格
【发布时间】:2019-02-15 22:21:50
【问题描述】:

我在 python 中使用 stdout 打印输出,但它保留了它保持打印的内容最后有空格,并且rsplit() 总是给我一个错误。代码如下。



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 pre-order
# traversal of the BST
def pre_order(node):
    if not node:
        return
    if root:
        sys.stdout.write(node.data + ' ')
        pre_order(node.left)
        pre_order(node.right)


def no_spaces(s):
    return ' '.join(s.rsplit())


if __name__ == '__main__':
    arr = []
    for line in sys.stdin.readline().strip().split(" "):
        arr.append(line)
    # arr = [7, 898, 157, 397, 57, 178, 26, 679]
    # Output = 178 57 26 157 679 397 898
    narr = arr[1:]
    print(narr)
    narr = sorted(narr, key=int)
    root = sort_array_to_bst(narr)
    pre_order(root)

我用输入 7 898 157 397 57 178 26 679 我得到输出 178 57 26 157 679 397 898. . 是为了说明空格,但注意在实际输出中它只是一个空格。我试过
sys.stdout.write(node.data + ' ').rsplit() 但得到: `AttributeError: 'int' 对象没有属性 'rsplit'。 我该怎么做,或者有其他选择吗?

【问题讨论】:

  • sys.stdout.write(node.data + ' ') 不返回str,而是返回int。你认为应该返回什么?
  • 即使我这样做 sys.stdout.write(str(node.data) + ' ') 仍然会得到相同的结果
  • 什么?我在解释为​​什么你不能在 sys.stdout.write(...) 的结果上调用 .rsplit()
  • 问题是你总是在最后打印一个空格。您必须为最后一次写入打印一个空格。在 before 之前添加一个空格可能更容易,特殊情况下根节点不这样做。那么就不会有终止空间了。
  • 你卡在哪里了?如果您不想要空间,请不要打印它。对于仅在 元素之间获取空格,您可以设置一个标志,或者对第一个或最后一个元素进行特殊处理,或者简单地将它们全部保存,并将 join 列表保存到整个输出字符串中。

标签: python python-3.x binary-search-tree stdout preorder


【解决方案1】:

这是一种仅在 元素之间打印空格的方法:

if root:
    if node != root:
       sys.stdout.write(' ')
    sys.stdout.write(str(node.data))
    pre_order(node.left)
    pre_order(node.right)

【讨论】:

    猜你喜欢
    • 2011-04-17
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多