打印列表中的所有偶数,直到给定的数字

时间:2013-01-26 12:47:41

标签: python

我刚刚开始涉足Python,并开始浏览learnpython.org上的章节。在“循环”一章中,我用以下代码解决了这个挑战。但是我不确定它是最有效的。这当然似乎并不像我必须两次定义“不超过”的数字。在这个(我猜)容易出问题的情况下,DRY应该可以坚持,对吧?

exercise

  

循环并打印出数字列表中的所有偶数   他们收到的订单相同。不要打印任何数字   在序列中的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

6 个答案:

答案 0 :(得分:2)

这是elseelif的用途:

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

答案 1 :(得分:1)

另一种方法是使用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,然后从偶数数字

答案 2 :(得分:1)

这也是可能的:

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

答案 3 :(得分:0)

我只是在我的“学习基础的东西”中进行这项练习,我出来了一个类似但不知何故更糟糕的解决方案,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

答案 4 :(得分:0)

你可以使用列表理解

来做到这一点

解决方案是这样的:

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

答案 5 :(得分:0)

  

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