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

Sel*_*hon 1 python list-comprehension list

我想尝试所有数字b/1 1和1000包含7.

尝试:

lst=[y for y in range(1,1000) if 7 in y]
print (lst)
Run Code Online (Sandbox Code Playgroud)

得到以下错误:

TypeError: argument of type 'int' is not iterable
Run Code Online (Sandbox Code Playgroud)

尝试:

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)
Run Code Online (Sandbox Code Playgroud)

这给了

if any('3') in i:
TypeError: 'in <string>' requires string as left operand, not bool

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

有没有想过用列表理解来完成这个?

cs9*_*s95 7

7 in y是无效的,因为in适用于容器并且y不是可迭代的.

any(<string>)无效(语义,语法上不),因为表达式的结果是一个布尔值(如你推测).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)]
Run Code Online (Sandbox Code Playgroud)

为了您的信息,您还可以使用感兴趣的a lambdafilterout值.

list(filter(lambda x: '7' in str(x), range(1, 1000)))
Run Code Online (Sandbox Code Playgroud)

虽然,我不推荐这个,因为filter(特别是a lambda)一般比它的列表理解等效.

它可能更具功能性和map str范围:

list(filter(lambda x: '7' in x, map(str, range(1, 1000))))
Run Code Online (Sandbox Code Playgroud)

迭代器版本lambda,最后两个选项中的任何一个但没有应用list,只有在迭代大量项目时才值得.