我遇到了问题。
如何使用功能在一个班轮下写字?
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]的新列表。
答案 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))