我正在尝试查找包含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)]
供您参考,您也可以使用感兴趣的
lambda
和filter
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/