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,...
然后我想采取最高元素及其索引。我怎么能这样做?谢谢。
答案 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
max
与enumerate
进行第二项任务:
>>> 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