繁体   English   中英

这是一个非序列?

[英]how is this a non-sequence?

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

vals = ['0.13', '324', '0.23432']

并尝试这样的列表理解:

best = [x for x in vals > 0.02]

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

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

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

谢谢。

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

best = [x for x in vals if x > '0.02']

您的原始表达式[x for x in vals > '0.02']被解析为[x for x in (vals > '0.02')] 由于vals > '0.02'是一个布尔值,而不是一个序列,因此不可能迭代它。

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

best = [x for x in vals if float(x) > 0.02]

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

不, vals > 0.02并不完全是一个序列。 此外,比较字符串(包含在val中)不会产生您期望的结果。 你可能想做:

vals = [0.13, 324.0, 0.23432]
best = [x for x in vals if x > 0.02]

话虽这么说,一定要看看NumPy 它允许您将您的示例编写为:

from numpy import *
vals = asarray([0.13, 324.0, 0.23432])
best = vals[vals > 0.02]

虽然这看起来可能不多,但它提供了许多功能和优点,您不希望错过使用数字数组和矩阵。

你试图迭代vals > 0.02 ,这不是一个序列。 如果你试图过滤到任何> 0.02 do: [x for x in vals if x > 0.02]

你还遇到了另一个问题(除了缺少x> 0.02),你要比较一个字符串列表和一个浮点数。

所以你可能想要的是[x for x in vals if x > '0.02']

我已经测试过这会给你预期的行为。 ['324', '0.23432']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM