如何将结果打印为列表?

时间:2016-05-15 12:09:46

标签: python list python-3.x python-3.4

我创建了一个程序,输出打印为例如36, 6, 2, 1

我希望它能打印[36, 6, 2, 1]

这是我目前的代码:

def collatz(n):

    print(n, end = ', ')

    while (n > 1):
        if n % 2 == 0:
            n=int(n**0.5)
        else:
            n=int(n**1.5)
        if n == 1:
            print(1)
        else:
            print(n, end = ', ')

我不知道在这一点上要编辑什么,因为我已经尝试了很多混乱的打印语句,我在其他帖子中看到使用print(*n, ...)但是我收到了错误:

TypeError: print() argument after * must be a sequence, not int.

我明白为什么它不起作用所以我在这一点上迷失了。

4 个答案:

答案 0 :(得分:2)

要控制其打印方式,只需单独打印[]即可。不要混淆打印的方式存储的方式或者它的数据类型。

def collatz(n):

    print('[{}'.format(n), end=', ')

    while (n > 1):
        if n % 2 == 0:
            n=int(n**0.5)
        else:
            n=int(n**1.5)
        if n == 1:
            print(1, end=', ')
        else:
            print(n, end = ', ')
    print(']', end='')

答案 1 :(得分:1)

最好的方法是创建一个列表并将n的值附加到列表中。通过这种方式,您可以利用str(list)的内置功能,在打印时自动将[]添加到结尾。

示例代码可以是

def collatz(n):

    templist = [n]    
    while (n > 1):
        if n % 2 == 0:
            n=int(n**0.5)
        else:
            n=int(n**1.5)
        if n == 1:
            templist.append(1)
        else:
            templist.append(n)
    print(templist)

现在,当您运行collatz(36)时,您会获得[36, 6, 2, 1]

答案 2 :(得分:1)

中删除if条件,您可以大大简化您的功能
if n % 2 == 0:
  n=int(n**0.5)
else:
  n=int(n**1.5)

与:n % 2 + 0.5

相同

并且还使用递归而不是迭代。因此,您的collatz函数可以简单地实现:

def collatz(n):
  if n <= 1:
    return [1]
  return [n] + collatz(int(n ** (n % 2 + 0.5)))

collatz(n)现在将返回一个很好的数组,如果函数只有一个责任,它会更好。现在,您可以将其包装在一个函数中,该函数以类似Python的格式打印数组:

def print_collatz(n):
  return str(collatz(n))

所以你可以简单地打电话:

print_collatz(36)
# [36, 6, 2, 1]

返回数组格式的字符串:

答案 3 :(得分:-1)

您可以创建一个列表并打印其字符串表示形式:

def collatz(n):

    my_list = []

    my_list.append(n)

    while (n > 1):
        if n % 2 == 0:
            n=int(n**0.5)
        else:
            n=int(n**1.5)
        if n == 1:
            my_list.append(1)
        else:
            my_list.append(n)

    print(str(my_list))