这怎么不是一个序列?
我正在对一个数字字符串的列表进行列表推导,比如这个列表看起来是这样的:
vals = ['0.13', '324', '0.23432']
然后我尝试了这样的列表推导:
best = [x for x in vals > 0.02]
结果我遇到了一个类型错误:无法对非序列进行迭代。
难道列表不是一种序列吗?应该是可以首先进行迭代的东西吧?那么,什么是序列呢?
我发现很难找到这些基本问题的答案。
谢谢。
4 个回答
2
你正在尝试遍历 vals > 0.02
,但这不是一个可以逐个访问的序列。如果你想筛选出所有大于 0.02
的值,可以这样做:[x for x in vals if x > 0.02]
4
不,vals > 0.02
并不是一个准确的序列。而且,比较字符串(在 vals 中的内容)也不会得到你想要的结果。你可能需要这样做:
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]
虽然这看起来没什么特别的,但它提供了很多功能和优势,让你在处理数字数组和矩阵时不会错过。
8
你需要检查每个项目是否大于 '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
转换为浮点数,这样你就可以将一个浮点数与另一个浮点数进行比较,这可能是你想要的结果。虽然最终得到的列表还是字符串,因为我们收集的是 [x for ...]
,而不是 [float(x) for ...]
。这只是给你一些思考的方向。