我正在尝试查找包含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>)也是无效的(从语法上来说,不是语法上的),因为表达式的结果是布尔值(如您所料)。 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)]


供您参考,您也可以使用感兴趣的lambdafilter out值。

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才是值得的。

关于python - 列出理解以查找1到1000之间的所有数字,其中包含7,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48430360/

10-16 20:44