Skip to main content
 首页 » 编程设计

python之列表理解以查找 1 到 1000 之间的所有数字,其中包含 7

2025年05月04日14lidabo

我正在尝试找出所有包含 7 的数字 b/1 1 和 1000。

尝试过:

lst=[y for y in range(1,1000) if 7 in y] 
print (lst) 

出现以下错误:

TypeError: argument of type 'int' is not iterable 

尝试过:

lst=[y for y in range(1,1000)] 
newlst=[] 
str1=list(map(lambda x:str(x),lst)) 
 
for i in str1: 
    if any('7') in i: 
        newlst.append(i) 
print (newlst) 

这给出了

if any('3') in i: 
TypeError: 'in <string>' requires string as left operand, not bool 
 
Process finished with exit code 1 

有什么想法可以通过列表理解来实现吗?

请您参考如下方法:

7 in y无效,因为 in适用于容器和 y不是可迭代对象。

any(<string>) 也是无效(在语义上,而不是在句法上),因为表达式的结果是一个 bool 值(如您推测的那样)。 any对序列执行短路,评估它接收到的容器/可迭代对象中每个元素的真值。由于所有字符串(空字符串除外)都是 True , any(<non empty string>)评估为 True , 所以使用 any一开始没有多大意义。事实上,你刚刚完成了吗if '7' in i ,那会奏效的。

要回答您原来的问题,您可以转换 y到一个字符串并检查字符是否'7'存在。

[y for y in range(1, 1000) if '7' in str(y)] 

供您引用,您还可以使用 lambda和 filter出感兴趣的值(value)。

list(filter(lambda x: '7' in str(x), range(1, 1000))) 

不过,我不推荐这样做,因为 filter (特别是对于 lambda )一般来说 慢 比它的列表理解等效。

有可能变得更加实用并且map str在范围内:

list(filter(lambda x: '7' in x, map(str, range(1, 1000)))) 

lambda 的迭代器版本, 最后两个选项之一但不应用 list , 只有在迭代大量项目时才值得。