2013-08-19 8 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 я могу сделать это? Спасибо.

+0

Массив для каждой итерации во внешнем цикле? –

+0

Yeah.I хочу напечатать результаты в массиве и найти максимальное значение и его индекс. – 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 

И max с enumerate для второй задачи:

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

У меня нет списка. У меня есть только значения, которые исходят из цикла 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

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.so, как я могу напечатать их в массиве и найти максимальное значение и его индекс? – KillerCode

+0

@ user2297793, вы ищете самый длинный результат? –