1
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,..

那我想取最高元素及其索引。我该怎么做呢?谢谢。

4

2 回答 2

2

您可以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

max对于enumerate第二个任务:

>>> ind, val = max(enumerate(result), key=lambda x:x[1])
>>> ind, val
(2, 9)
于 2013-08-19T06:44:37.170 回答
1

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

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
于 2013-08-19T06:46:49.453 回答