Как избавиться от конечных пробелов при печати списка с использованием stdout python3 - PullRequest
0 голосов
/ 16 февраля 2019

Я печатаю вывод, используя stdout в python, но он сохраняет то, что печатает, в конце имеет пробел, и 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)

I с вводом 7 898 157 397 57 178 26 679 Я получаю вывод 178 57 26 157 679 397 898. . предназначен для иллюстрации пробелов, но обратите внимание, что в фактическом выводе это просто пробел.Я пытался
sys.stdout.write(node.data + ' ').rsplit(), но получить объект: `AttributeError: 'int' не имеет атрибута rsplit.Как я могу это сделать, или есть альтернативы?

1 Ответ

0 голосов
/ 16 февраля 2019

Вот один из способов печати только пробела между элементами:

if root:
    if node != root:
       sys.stdout.write(' ')
    sys.stdout.write(str(node.data))
    pre_order(node.left)
    pre_order(node.right)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...