我正在尝试找出所有包含 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 , 只有在迭代大量项目时才值得。
