我想创建一个列表,其中包含只有9和8的数字,按升序排列,介于0到1000之间。如何通过Python中的lambda
函数执行此操作?
预期输出为:
[8, 9, 88, 89, 98, 99, 888, 889, 898, 899, 988, ...]
答案 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是你的清单