2013-08-19 51 views
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 

我想這些結果打印在一個數組或類似的東西。我的意思是這樣的。打印for循環結果在一行和排序

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

然後我想取最高元素及其index.How我能做到這一點嗎?謝謝。

+0

外循環中每次迭代的數組? –

+0

是的。我想將結果打印到一個數組中,並找到最大值及其索引。 – KillerCode

回答

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) 
+0

我沒有list.I只有來自for循環的值。我如何將它們打印到數組中並找到最大值和它的索引? – KillerCode

+0

@ user2297793在您的代碼中,您明確地將項目追加到'result'列表。除了print(n)和print(len(result))之外,你什麼都不打印。 –

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 
+0

我沒有list.I只有來自for循環的值。我如何將它們打印到數組中並找到最大值和索引? – KillerCode

+0

@ user2297793,您正在尋找最長的結果? –