繁体   English   中英

打印for循环导致一行和排序

[英]Print for loop results in one line and sort

for n in range(1,1000000):
    print(n)
    result = []
    for x in range(1,3000001):
        if n%2==0:
            x=n/2
        else:
            x=3*n+ 1
        n=x
        result.append(n)
        if n==1:
            break
    print(len(result))
n+=1

我希望这些结果以数组或类似的方式打印。我的意思是这样的。

3,1,7,2,5,8,1,..

然后我想采取最高元素及其索引。我怎么能这样做?谢谢。

您可以使用str.join执行第一项任务:

>>> result = [4, 0, 9, 7, 8, 3, 2, 6, 1, 5]
>>> print (', '.join(map(str, result)))
4, 0, 9, 7, 8, 3, 2, 6, 1, 5

maxenumerate第二个任务:

>>> ind, val = max(enumerate(result), key=lambda x:x[1])
>>> ind, val
(2, 9)

如果将完成工作的循环分离到自己的函数中,这将变得更加容易。

def collatz_length(n):
    result = []
    for x in range(1,3000001):
        if n%2==0:
            x=n/2
        else:
            x=3*n+ 1
        n=x
        result.append(n)
        if n==1:
            break
    return len(result)


print(max((collatz_length(i + 1), i) for i in range(1000000)))

由于您没有使用result ,只是它的长度,您可以通过简单计数来简化(并加速)该功能

您可以使用三元表达式来整理x的计算

def collatz_length(n):
    for c in range(1, 3000001):
        x = 3 * n + 1 if n % 2 else n / 2
        n = x
        if n == 1:
            return c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM