Python 使用lambda和dictionary函数
我写了这个函数:Python 使用lambda和dictionary函数,python,python-2.7,Python,Python 2.7,我写了这个函数: def make_upper(words): for word in words: ind = words.index(word) words[ind] = word.upper() 我还编写了一个计算每个字母出现频率的函数: def letter_cnt(word,freq): for let in word: if let == 'A': freq[0]+=1 elif let ==
def make_upper(words):
for word in words:
ind = words.index(word)
words[ind] = word.upper()
我还编写了一个计算每个字母出现频率的函数:
def letter_cnt(word,freq):
for let in word:
if let == 'A': freq[0]+=1
elif let == 'B': freq[1]+=1
elif let == 'C': freq[2]+=1
elif let == 'D': freq[3]+=1
elif let == 'E': freq[4]+=1
如果要使用
lambda
将列表中的字符串转换为大写,可以将其与as一起使用:
根据:
映射(函数、iterable等)
将函数应用于iterable的每个项并返回结果列表
要查找word中每个字符的频率,您可以使用(子类
dict
类型)作为:
根据:
计数器是用于计算可散列对象的dict子类。它是一个无序集合,其中元素存储为字典键,其计数存储为字典值
对于字母计数,不要重新发明轮子 计数器是用于计算可散列对象的dict子类。它是一个无序集合,其中元素存储为字典键,其计数存储为字典值。计数允许为任何整数值,包括零或负计数。计数器类类似于其他语言中的bags或Multiset
是的,用字典计算字母频率会更有效率。请注意,您正在手动将每个字母与数字对齐(“a”与0等)。如果我们可以有一个数据类型,将一个字母与它出现的次数直接关联,而不在两者之间添加一组额外的数字,这不是更容易吗 以代码为例:
freq = {"A":0, "B":0, "C":0, "D":0, ... ..., "Z":0}
for letter in text:
freq[letter] += 1
此字典用于比当前代码更有效地计算频率。每次看到一封信时,只需在一个条目中添加一封即可
我还将提到,您可以使用某些库有效地计算频率。如果您对分析频率感兴趣,请查看collections.Counter()和collections.Counter.most_common()方法 无论您是否决定只使用collections.Counter(),我都会尝试了解为什么字典在这种情况下很有用
最后一个注意事项:我个人发现为“freq”字典键入值很乏味。如果需要,您可以使用以下代码动态构建字母表字母的空字典:
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
freq = {letter:0 for letter in alphabet}
您可以阅读和的文档,或将其作为一个小演示运行:
from collections import Counter
words = ["acdefg","abcdefg","abcdfg"]
#list comprehension no need for lambda or map
new_words = [word.upper() for word in words]
print(new_words)
# Lets create a dict and a counter
letters = {}
letters_counter = Counter()
for word in words:
# The counter count and add the deltas.
letters_counter += Counter(word)
# We can do it to
for letter in word:
letters[letter] = letters.get(letter,0) + 1
print(letters_counter)
print(letters)
def punc_移除(文字):
定义字母(单词、频率):
对于输入字:
频率[let]+=1
导入字符串
def字母频率(fname):
fhand=打开(fname)
freqs=dict()
alpha=列表(字符串.大写[:26])
对于let-in alpha:freqs[let]=freqs.get(let,0)
你是什么意思?这就是我所做的:导入字符串alpha=list(string.uppercase[:26])freq\u d=dict()以让alpha:freq\u d[let]=freq\u d.get(let,0)你检查了我发布的链接了吗?在我发布它的时候,我在手机上,所以复制粘贴东西不是很容易,到我可以的时候,@anonymous已经详细说明了。下次我会详细说明
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
freq = {letter:0 for letter in alphabet}
from collections import Counter
words = ["acdefg","abcdefg","abcdfg"]
#list comprehension no need for lambda or map
new_words = [word.upper() for word in words]
print(new_words)
# Lets create a dict and a counter
letters = {}
letters_counter = Counter()
for word in words:
# The counter count and add the deltas.
letters_counter += Counter(word)
# We can do it to
for letter in word:
letters[letter] = letters.get(letter,0) + 1
print(letters_counter)
print(letters)
for word in words:
if word.isalnum() == False:
charl = []
for char in word:
if char.isalnum()==True:
charl.append(char)
ind = words.index(word)
delimeter = ""
words[ind] = delimeter.join(charl)
for line in fhand:
line = line.rstrip()
words = line.split()
punc_remove(words)
#map(lambda word: word.upper(),words)
words = [word.upper() for word in words]
for word in words:
letter_cnt_dic(word,freqs)
fhand.close()
return freqs.values()