假设存在一个字符串' Hello World',我希望使用字典来获取元素及其频率的映射,以下代码就足够了,但是如果我需要使用列表理解,如何使用' if',' else'?请提供您的解决方案
for i in s:
if i in d:
d[i]=d[i]+1
else:
d[i]=1
答案 0 :(得分:1)
您可以使用字典理解(使用列表理解来构建字典没有意义):
set(s)
import collections
collections.Counter(s)
是字符串中的一组唯一字符,并且理解创建一个字符作为键和出现次数(使用str.count
)作为值的字典。
但你根本不需要理解,python附带“包含电池”。在这种情况下,电池为collections.Counter
:
s = 'Hello world'
d = {}
[d.__setitem__(i, d[i]+1) if i in d else d.__setitem__(i, 1) for i in s]
print(d)
如果你真的想要使用列表理解(我的个人观点:你没有,不应该!),你需要处理副作用,例如:
__setitem__
d[i] = 1
来电是必要的,因为d[i] = d[i] + 1
或__setitem__
是作业,因此在理解中是禁止的。但ar = [["a","b","c"], ["a"], ["c","d"], ["e"]]
for pos,inner_ar in enumerate(ar):
if len(inner_ar)==1:
for i,inner_ar2 in enumerate(ar):
if i!=pos and any(c for c in inner_ar2 for c in inner_ar):
del ar[pos]
del ar[i]
print(ar)
是功能替代方案。