Python中的一个内衬,如果在循环中

时间:2016-08-21 18:53:59

标签: python python-2.7 python-3.x list-comprehension

我遇到了问题。

如何使用功能在一个班轮下写字?

def onlyPairs(string):
    for x in string:
        if int(x)%2:
            return False
    return True

print [string for string in map(str, myList) if onlyPairs(string) ]

我已经上了好几个小时了,我觉得我已经接近但我看不到只涉及一条线的解决方案。

我正在尝试列出一个数字列表,每个数字都是偶数。

例如,如果mylist是[1200,3520,2002,2006,1230],则该行应生成一个仅包含[2002,2006]的新列表。

3 个答案:

答案 0 :(得分:4)

使用套装:

myList = [1200, 3520, 2002, 2006, 1230]
print [num for num in myList if not set(str(num)) - set('02468')]

答案 1 :(得分:2)

将生成器表达式与all()

一起使用
[item for item in myList if all(not int(x)%2 for x in str(item))]

但似乎你想检查一个数字的所有数字是否均匀。在这种情况下,将数字转换为字符串并不是一个好主意。相反,您可以使用以下函数,它适用于整数:

def check_all_even(num):
  while num:
    n = num % 10
    num = num / 10
    if n % 2:
      return False
  return True

使用它过滤您的列表:

filter(check_all_even, myList)

演示:

lst = [1200, 3520, 2002, 2006, 1230]
print filter(check_all_even, lst) # In python 3.x print(list(filter(check_all_even, lst))) 
[2002, 2006]

答案 2 :(得分:0)

这是一个可能的解决方案:

myList = [1200, 3520, 2002, 2006, 1230]
print map(str, filter(lambda x: all([int(d) % 2 == 0 for d in str(x)]), myList))