我正在嘗試將名為mpg的串列與條目“cty”(從字典轉換而來)相加。
樣本資料:
[{'': '1', 'trans': 'auto(l5)', 'drv': 'f', 'cty': '18'}, {'': '2', 'trans': 'manual(m5)', 'drv': 'f', 'cty': '21'}]
我嘗試了兩種方法來做到這一點:
- 這給出了浮動物件不可迭代的錯誤。
for d in mpg:
sum(float(d['cty']))
- 這個沒有問題。
sum(float(d['cty']) for d in mpg)
我知道浮動物件是不可迭代的,但第二個方法不只是第一個串列理解的一個例子嗎?
為什么第二個選項有效而不是第一個?
uj5u.com熱心網友回復:
sum()將串列作為引數并將該串列的所有專案求和。簡單的浮點數或整數不是串列,因此不可迭代。
- 在示例 1 中,您遍歷字典串列的每個專案,但隨后只將一個浮點數(當前字典的浮點值)傳遞給您的函式,結果是
sum(123),然后回傳錯誤。 - 在示例 2 中,您首先遍歷整個字典串列并將所需的值提取到一個新串列中。如果您存盤
float(d['cty']) for d in mpg在一個新變數中,它將創建一個串列。如果您現在傳遞該串列,該函式會產生sum([123, 456, 789]),它回傳所需的值。
uj5u.com熱心網友回復:
第二個有效,因為串列推導式在嘗試計算總和之前構造了一個串列,但第一種方法嘗試傳遞float(d['cty'])給sum. 但這只是一個浮點數而不是一個可迭代的(這是sum需要的)。看到第一種方式的這個修改:
lst = []
for d in mpg:
lst.append(float(d['cty']))
sum(lst)
uj5u.com熱心網友回復:
解決問題的兩種方法:
1.
i = 0
for d in mpg:
i = float(d['cty'])
x = sum([float(d['cty']) for d in mpg])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/352903.html
上一篇:根據條件從上一組中選擇值
