簡體   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