2013-08-19 2 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 

이러한 결과를 배열이나 그와 비슷한 것으로 인쇄하고 싶습니다.루프 결과를 한 줄에 출력하고 정렬하십시오.

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

는 .. 그럼 난 내가 그렇게 할 수 있습니까? 감사 가장 높은 요소와 index.How을 먹고 싶어.

당신은 첫 번째 작업에 대한 str.join을 사용할 수 있습니다
+0

외부 루프의 각 반복에 대한 배열은? –

+0

그래. 결과를 배열로 출력하고 최대 값과 그 인덱스를 찾고 싶다. – KillerCode

답변

2

: 두 번째 작업에 대한 enumerate

>>> 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 : 당신은 자신의 기능으로 작업을 수행하는 루프를 분리하는 경우

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

나는 list.I 가지고있는 값을 가지고 for 루프 .so 어떻게 배열로 인쇄하고 최대 값과 그 인덱스를 찾을 수 있습니까? – 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

목록이 없습니다. for 루프의 값만 있습니다. 어떻게 배열에 인쇄하고 최대 값과 해당 인덱스를 찾을 수 있습니까? – KillerCode

+0

@ user2297793, 가장 오랫동안 결과를 찾고 있습니까? –

관련 문제