将if-else转换为简明列表理解

时间:2017-05-03 14:47:55

标签: python python-3.x list-comprehension

假设存在一个字符串' Hello World',我希望使用字典来获取元素及其频率的映射,以下代码就足够了,但是如果我需要使用列表理解,如何使用' if',' else'?请提供您的解决方案

for i in s:
    if i in d:
        d[i]=d[i]+1
    else:
        d[i]=1

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) 是功能替代方案。