bis*_*son 4 python lambda python-3.x
我试图解决这个小挑战:
您想要一个defaultdict,每次查找不存在的键(即计数器)时使用一个不同的值;1表示第一个不存在的密钥,2表示第二个,等等。
我能够像这样解决它:
from collections import defaultdict
def f(a=[0]):
a[0]+=1
return a[0]
s=defaultdict(f)
Run Code Online (Sandbox Code Playgroud)
好处是尝试一行完成此操作。
s=defaultdict(lambda a=[0]: (a[0]+=1))
Run Code Online (Sandbox Code Playgroud)
SyntaxError:语法无效_________ ^
有没有办法在lambda中做到这一点?更新可变的默认arg并返回?
有两个问题:
... += ...是一个陈述,而不是一个表达。您可以__iadd__明确呼叫,除了 ...int没有定义__iadd__; a[0] += 1只是实现为a[0] = a[0] + 1。您需要做的是__setitem__显式调用以更新默认列表值的第0个元素。那会返回None,而不是a[0],因此您还需要一个or表达式来返回a[0](自None or x == x)的值:
>>> s = defaultdict(lambda a=[0]: a.__setitem__(0, a[0] + 1) or a[0])
>>> s[6]
1
>>> s[9]
2
>>> s[6]
1
>>> s[8]
3
Run Code Online (Sandbox Code Playgroud)
(我会写defaultdict(itertools.count(0).__next__)我自己。)
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |