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

时间:2013-08-19 06:36:03

标签: python sorting for-loop python-3.x collatz

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

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

2 个答案:

答案 0 :(得分: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

maxenumerate进行第二项任务:

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

答案 1 :(得分: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,只需要它的长度,您可以通过简单计算

来简化(并加速)该功能

您可以使用ternary expression

整理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