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