这是一个非序列?

use*_*930 3 python sequences list-comprehension list

我正在运行列表理解数字列表作为字符串,所以例如列表看起来像这样

vals = ['0.13', '324', '0.23432']
Run Code Online (Sandbox Code Playgroud)

并尝试这样的列表理解:

best = [x for x in vals > 0.02]
Run Code Online (Sandbox Code Playgroud)

我得到一个TypeError:迭代非序列.

列表不是一个应该是您应该能够迭代的第一个序列吗?什么是序列?

我找到的基本问题很难找到答案.

谢谢.

ide*_*ide 8

您需要检查每个项目是否大于'0.02',而不是序列是否更大.

best = [x for x in vals if x > '0.02']
Run Code Online (Sandbox Code Playgroud)

您的原始表达式[x for x in vals > '0.02']被解析为[x for x in (vals > '0.02')].由于vals > '0.02'是布尔值,而不是序列,因此无法对其进行迭代.

编辑:我更新了这个答案,'0.02'在评论中使用每个Joe的建议字符串(谢谢).这适用于这种情况,但如果你真的想要进行数字比较而不是字典比较,你可以使用:

best = [x for x in vals if float(x) > 0.02]
Run Code Online (Sandbox Code Playgroud)

这会转换x为float,以便您可以按照预期将浮点数与另一个浮点数进行比较.列表理解的结果仍然是字符串列表,因为我们正在收集[x for ...]而不是[float(x) for ...].只是一些值得思考的东西.

  • 这将给出['0.13','324','0.23432']作为答案.还有另一个问题,OP正在将字符串与浮点数进行比较,因此它们都将为True.您需要在'0.02'周围加上引号或将val转换为浮点数列表. (2认同)