2014-10-07 2 views
1

Привет, первый раз задавая вопрос на этом форуме.Функция Doubles() Python request a assistant

У меня возникли проблемы с этим вопросом.

написать функцию doubles(), которая принимает в качестве входных данных список целых чисел и выводит целые числа в списке, которые в два раза превышают предыдущее целое число, по одному на строку.

Так что я пытался сделать в первый должен был написать код, который проходит через список целых чисел, используя индекс

Такие, как:

integers = [] 

def doubles(integers): 
    index = 0 
    while index < len(integers): 
     if index == (2*(index+1)):   
      print(index) 

doubles([3,0,1,2,3,6,2,4,5,6,5]) 

Что я думаю о коде Я написал это. Хотя индекс меньше длины списка целых чисел, если индекс равен удвоенному следующему индексу, он будет распечатывать это число. Однако я, кажется, не получаю результат, которого хочу. Спасибо.

+0

Какой должна 'двойников ([3,0,1,2,3,6,2,4,5,6,5])' выход? Ваше определение не совсем ясно для меня. – Gabe

+2

erm ... вы никогда не просматриваете значения списка. Вы просто сравниваете индексы. где-то вы должны получить доступ к 'integers [index]' для получения таких значений. Кроме того, если вы никогда не увеличиваете «индекс», у вас есть бесконечный цикл. Наконец, в python вы хотите избежать такого цикла, насколько сможете. Итерация по индексу * намного медленнее, чем повторение по списку напрямую, а также ухудшение кода. – Bakuriu

+0

Ваш вопрос и ваш код не о том же.Попробуйте лучше выразить то, что вам нужно –

ответ

0

Вы можете использовать это:

>>> def doubles(integers): 
... return [j for i,j in zip(integers,integers[1:]) if j==2*i] 
... 
>>> doubles([3,0,1,2,3,6,2,4,5,6,5]) 
[2, 6, 4] 

с zip(integers,integers[1:] вы можете получить все пары индексов тандем.

[(3, 0), (0, 1), (1, 2), (2, 3), (3, 6), (6, 2), (2, 4), (4, 5), (5, 6), (6, 5)] 
+0

Он запрашивает «" «целые числа в списке, которые в два раза превышают предыдущее целое число в списке, по одному в строке« », так что вы want 'return [j для i, j в zip (целые числа, целые числа [1:]), если j == 2 * i]', но в противном случае это хороший способ сделать это. – JB333

+0

Да, спасибо, что напомнили! – Kasramvd

2

Вы делаете пару вещей, которые нуждаются в исправлении.

  1. Вы хотите смотреть на предметы в списке integers вместо указателей этих предметов. Вы делаете это, глядя на integers[n] где n - индекс.
  2. Вы хотите быть по сравнению с предыдущим значением из списка, а не на следующий, так что вы должны сравнивать integers[index] с integers[index-1] в отличие от обозначения с index + 1
  3. Вы должны быть пробегаем по списку индексов. Ваш цикл while никогда не будет завершен в этом примере. Вы можете сделать while index < len(integers), а затем увеличивать индекс на один раз каждый раз, но проще сделать цикл for.

Попробуйте это:

def doubles(integers): 
    index = 0 
    for index in range(1,len(integers)): 
     if integers[index] == 2*integers[index-1]:   
      print(integers[index]) 
+0

Спасибо, что помогли много. Я вижу, что для индекса в диапазоне 1 до длины intgers; если integer [i] удваивает intger [i-1] (что означает предыдущее целое число), он будет печатать целое число [i] Хорошо спасибо. Чтение кода не сложно, но писать код мне тяжело, ха-ха. Еще раз спасибо – Cross113

+0

Если это ответили на ваш вопрос, отметьте его как ответ, нажав на галочку слева от вопроса. –

0

Как насчет

doubles = lambda l: reduce(lambda x,y: (print(y) or y) if 2*x==y else y, l) or None 

Это должно сделать трюк!

0

Попробуйте так: -

(j for i, j in enumerate(integers) if integers[i] == 2*integers[i-1]) 
+0

не работает. double ([4]) return [4] .... –

0
def doubles(integers): 
    index = 0 
    for index in range(1,len(integers)): 
     if integers[index] == 2*integers[index-1]:   
      print(integers[index]) 
def doubles(integers): 
    index = 0 
    for index in range(1,len(integers)): 
     if integers[index] == 2*integers[index-1]:   
      print(integers[index]) 
def doubles(integers): 
    index = 0 
    for index in range(1,len(integers)): 
     if integers[index] == 2*integers[index-1]:   
      print(integers[index]) 
def doubles(integers): 
    index = 0 
    for index in range(1,len(integers)): 
     if integers[index] == 2*integers[index-1]:   
      print(integers[index]) 
+1

Кодовые ответы на SO не поощряются, так как они не объясняют, как работает код. Пожалуйста, добавьте объяснение, чтобы помочь OP и другим людям учиться. –

+0

... и отредактируйте форматирование вашего ответа. код должен быть обозначен как код. – jogo