gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:30:44 24 4
gpt4 key购买 nike

我正在尝试找出所有包含 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)]

供您引用,您还可以使用 lambdafilter出感兴趣的值(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 , 只有在迭代大量项目时才值得。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com