Распечатайте все четные числа в списке до определенного номера

Я только начинаю спотыкаться на Python и начал переходить к главам на learnpython.org. В главе «Циклы» я решил проблему с помощью следующего кода. Однако я не уверен, что он наиболее эффективен. Кажется, это не так, как я должен определить «номер, чтобы не выходить за пределы» дважды. В этой (я предполагаю) простой проблеме, СУХОЙ следует придерживаться, не так ли?

Упражнение

  • В чем смысл «(1,) == 1» в Python?
  • Получите диктовку всех переменных, находящихся в настоящее время в области и их значениях
  • Создать константы с помощью модуля настроек?
  • Как настроить промежуточную среду в Google App Engine
  • Python the Hard Way - упражнение 6 -% r против% s
  • Отключить отладку Django для сельдерея
  • Прокрутите и распечатайте все четные числа из списка номеров в том же порядке, в каком они получены. Не печатайте числа, которые появляются после 237 в последовательности.

    Мой код:

    numbers = [ 951, 402, 984, 651, 360, 69, 408, 319, 601, 485, 980, 507, 725, 547, 544, 615, 83, 165, 141, 501, 263, 617, 865, 575, 219, 390, 984, 592, 236, 105, 942, 941, 386, 462, 47, 418, 907, 344, 236, 375, 823, 566, 597, 978, 328, 615, 953, 345, 399, 162, 758, 219, 918, 237, 412, 566, 826, 248, 866, 950, 626, 949, 687, 217, 815, 67, 104, 58, 512, 24, 892, 894, 767, 553, 81, 379, 843, 831, 445, 742, 717, 958, 609, 842, 451, 688, 753, 854, 685, 93, 857, 440, 380, 126, 721, 328, 753, 470, 743, 527 ] # My Solution for x in numbers: if x != 237: if x % 2 == 0: print x if x == 237: break 

  • Как создать новую папку с API Google Диска в Python?
  • Слияние двух целых чисел в Python
  • Перейти к определенной строке в Python?
  • Проверьте, запущен ли скрипт python
  • Чтение огромных данных из файлов и их вызов
  • Как операторы сравнения Python <и> работают с именем функции в качестве операнда?
  • 6 Solutions collect form web for “Распечатайте все четные числа в списке до определенного номера”

    Это то, что else и elif для:

     for x in numbers: if x == 237: break elif x % 2 == 0: print x 

    Другим методом является использование itertools который всегда оказывается полезным так или иначе:

     >>> from itertools import takewhile, ifilter >>> not_237 = takewhile(lambda L: L != 237, numbers) >>> is_even = ifilter(lambda L: L % 2 == 0, not_237) >>> list(is_even) [402, 984, 360, 408, 980, 544, 390, 984, 592, 236, 942, 386, 462, 418, 344, 236, 566, 978, 328, 162, 758, 918] 

    Таким образом, мы создаем ленивый итератор, который останавливается на 237, а затем берем из этих четных чисел

    Это также возможно:

     try: i = numbers.index(237) except: i = len(numbers) for n in numbers[:i]: if not n%2: print n 

    Я просто собираюсь пройти это упражнение в своем «изучении основы», и я вышел с похожим, но каким-то худшим решением, patrik 🙁

    x = 0 for loop in numbers: if (numbers[x]) % 2 ==0: print (numbers[x]) x = x+1
    if (numbers[x]) ==237: break
    else: x =x+1 continue

    вы можете сделать это, используя понимание списка

    Решение будет таким:

     numbers = [x for ind,x in enumerate(numbers) if x % 2== 0 and numbers[ind+1]!=237 ] 

    3 раза и сделали 🙂

      if x % 2 == 0: print x if x == 237: break if x % 2 != 0: continue 

    Вывод

     402 984 360 408 980 544 390 984 592 236 942 386 462 418 344 236 566 978 328 162 758 918 
    Python - лучший язык программирования в мире.