如何创建一个lambda函数来打印Python中包含x和y的数字?

时间:2014-10-08 13:02:39

标签: python lambda

我想创建一个列表,其中包含只有9和8的数字,按升序排列,介于0到1000之间。如何通过Python中的lambda函数执行此操作?

预期输出为:

[8, 9, 88, 89, 98, 99, 888, 889, 898, 899, 988, ...]

2 个答案:

答案 0 :(得分:3)

我根本不在这里使用lambda,而是使用itertools.product()来生成数字:

from itertools import product    
[int(''.join(d)) for l in range(1, 4) for d in product('89', repeat=l)]

这是所需输出所需的绝对最小工作量,不包括对列表进行硬编码。

扩展版本将是:

results = []
# ranging from 1 to 3 digits
for l in range(1, 4):
    # all combinations of l digits out of 8 and 9
    for digits in product('89', repeat=l):
        # put the digits together into one string, convert to an integer
        value = int(''.join(digits))
        results.append(value)

演示:

>>> from itertools import product
>>> [int(''.join(d)) for l in range(1, 4) for d in product('89', repeat=l)]
[8, 9, 88, 89, 98, 99, 888, 889, 898, 899, 988, 989, 998, 999]

您可以在函数中包含列表推导,以指定要使用的数字和要生成的最大位数:

def generate_numbers(digits, length):
    return [int(''.join(d)) for l in range(length) for d in product(digits, repeat=l + 1)]

generate_numbers('89', 3)
generate_numbers('123', 5)

答案 1 :(得分:-1)

您需要列表,以便使用

print [x  for x in arr if ('8' in str(x) or '9' in str(x))]

其中arr是你的清单