[英]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.