Python 列表理解+;=操作人员
如何转换此for循环:Python 列表理解+;=操作人员,python,for-loop,list-comprehension,Python,For Loop,List Comprehension,如何转换此for循环: smoke_ray = [18, 14] total = 0 for i in smoke_ray: total += i 进入列表理解?我试过: smoke_ray = [18, 14] total = 0 [total += i for i in smoke_ray] 问题是+=操作员的问题吗? 这就是我出错的地方 已更新完整代码: days = [ { "day_name": "wed",
smoke_ray = [18, 14]
total = 0
for i in smoke_ray:
total += i
进入列表理解?我试过:
smoke_ray = [18, 14]
total = 0
[total += i for i in smoke_ray]
问题是+=
操作员的问题吗?
这就是我出错的地方
已更新完整代码:
days = [
{ "day_name": "wed",
"smoked_at": {
'15:30': 1,
'16:30': 1,
'16:50': 2,
'17:30': 1,
'18:30': 1,
'20:20': 1,
'21:30': 1,
'22:30': 1,
'25:00': 5
}
},
{ "day_name": "thurs",
"smoked_at": {
'08:15': 1,
'08:40': 1,
'09:20': 1,
'10:00': 1,
'11:20': 1,
'11:38': 1,
'12:10': 1,
'13:00': 1,
'14:26': 1,
'15:40': 1,
'17:08': 1,
'18:10': 1,
'19:30': 1,
'20:20': 1,
'22:00': 1,
'23:00': 1,
'25:00': 2
}
}
]
smoke_ray = []
for i in days:
print(i["day_name"])
smokes = i["smoked_at"].values()
smokes_day = sum(smokes)
print(smokes_day)
smoke_ray.append(i)
total = 0
for i in smoke_ray:
total += i
print(total)
当尝试将最后一个for循环转换为列表理解时(你是说这不是编写循环的速记方式吗?我听说它更快)
我得到这个错误:
File "compiler.py", line 47
[total += i for i in smoke_ray]
^
SyntaxError: invalid syntax
当尝试使用sum时,它就是不起作用:
sum(烟光)
你甚至不需要一份清单。只需使用:
如果您想查看总和值列表,那么可以使用
import itertools
smoke_ray = [18, 14]
print(list(itertools.accumulate(smoke_ray)))
这将按元素显示序列的总和
输出
[18, 32]
列表理解是通过两个操作将输入列表转换为输出列表的操作:
- 每个元素的转换(也称为“映射”)
- 基于某种滤波准则的滤波
functools.reduce在Python库中找到
这样你就可以写作了
import functools
import operator
functools.reduce(operator.add, smoke_ray)
…但这是一个非常常见的操作,因此有一个简写:如前所述,您也可以使用sum(smoke\u ray)
您可以通过多种方式来完成,因为您在这里要求列表理解
(虽然列表理解在这里是一个不好的选项,但电池选项是sum(您的列表)
)试试这个:
sum([i for i in [18, 14]])
看看您现在为上下文添加的代码,我认为您遇到的问题实际上不是对列表求和,而是构建列表本身。当我使用for循环运行您的原始代码时,我也会失败
我认为问题出在smoke\u-ray.append(I)
:在这里,您将字典的整个元素(例如:{“day\u name”:“…”,“smoked\u at”:{…}
)添加到smoke\u-ray
列表中。然后,对列表中的值求和是没有意义的,因为它们是字典。如果您想将每个smokes\u day
添加到列表中,然后对它们求和,您可以在该循环中执行smoke\u ray.append(smoke\u day)
。然后,您应该能够使用其他答案中提到的sum
对列表进行求和
编辑:这并不是说对代码没有更多的改进,顺便说一句,保留原始结构的简单更改是将for循环更改为如下内容:
total=0
对于我来说,在几天内:
打印(i['day_name'])
smokes=i['smoked_at'].值()
吸烟天数=总和(吸烟)
打印(每天吸烟)
总数+=每天吸烟
打印(总计)
这样,您就可以在一个循环中对值求和,而无需构建另一个列表/使用列表理解。列表理解表达式应该返回一个列表。您希望返回什么类型的列表?仅使用sum(smoke\u-ray)
请使用完整的错误回溯更新您的问题。除了不适当的使用之外,列表理解的第一部分必须是表达式<但是,代码>+=
不是运算符,不能是表达式的一部分。这是增广赋值语句语法的一部分suggested@toRex在出现此错误之前我已尝试过:TypeError:不支持的操作数类型对于+:“int”和“dict”
请参阅完整代码和尝试使用sum时出现的错误
请参阅完整代码我不明白为什么sum
不能在银行使用以及详细解释
import functools
import operator
functools.reduce(operator.add, smoke_ray)
sum([i for i in [18, 14]])
24