如何使用dict comprehension(字典推导式)简化Python指定代码
Python字典推导式简化随机字母统计代码
原代码逻辑为抽取指定数量的元音字母、剩余数量的辅音字母,统计每个字母的出现次数存入字典。注意原代码存在变量名大小写不一致的问题(定义的是小写vowel/consonants,循环中使用大写VOWELS/CONSONANTS),统一变量名后可参考如下实现:
纯字典推导式实现(无需引入额外库)
import random VOWELS = "aeiou" CONSONANTS = "bcdfghjklmnpqrstvwxyz" hand = { char: all_chars.count(char) for all_chars in [ [random.choice(VOWELS) for _ in range(numVowels)] + [random.choice(CONSONANTS) for _ in range(n - numVowels)] ] for char in all_chars }
逻辑说明:
- 内层先生成和原逻辑完全一致的随机字母序列:前
numVowels个元素从元音中随机选取,剩余n - numVowels个从辅音中随机选取 - 外层遍历所有生成的随机字母,通过
count方法统计每个字母的出现次数,效果和原代码中hand.get(x, 0) + 1累加完全一致 - 将随机字母序列放在单元素列表中做临时存储,避免推导式中重复生成随机序列
更简洁的优化写法(借助collections.Counter)
如果允许引入标准库的Counter,代码更简洁、大数量场景下性能也更好:
import random from collections import Counter VOWELS = "aeiou" CONSONANTS = "bcdfghjklmnpqrstvwxyz" hand = dict(Counter( [random.choice(VOWELS) for _ in range(numVowels)] + [random.choice(CONSONANTS) for _ in range(n - numVowels)] ))
内容的提问来源于stack exchange,提问作者Otto Rodríguez
相关产品推荐
相关产品推荐

