我目前正忙于一项任务。该解决方案将输入一个txt文件,并运行计数回文的数量和频率。我需要使用Map reduce来创建
例如:字符串“bab bab bab cab cac dad”将输出:
bab 3
cab 1
dad 1
这是我到目前为止的情况
^{pr2}$当前打印
[['bab', 'bab', 'bab', 'dad', 'pap', 'pap', '']]
这是我目前为止在reduce部分的尝试
def p(lists):
for list in lists:
set_h = set(list)
return set_h
使用p函数,我想创建一组找到的所有回文。然后数一数列表上的回文,然后根据这个数字做一个口述
print reduce(p, [['bab', 'bab', 'bab', 'dad', 'pap', 'pap', '']])
我走对了吗?在
对于reduce函数,应该从一个空dict开始并更新/填充计数。Reduce函数需要两个参数,因此一个可以是dict,另一个是回文。可以在reduce中输入初始值,如下所示:
看看dict's get如何设置默认值,这将有助于简化reduce函数。在
在映射字符串之前,将字符串拆分为一个列表。map()用于列表、集合和dict,不是字符串。在
避免使用map filter reduce,除非您的赋值指定它;GVRsays so。正确的解决方案使用Python的list comprehension语法。事实上,你可以用一个非常讨厌的单句话:
^{pr2}$分解它。。。在
pal_count = {
x: word_list.count(x)
我们使用键:值语法将回文(x)与其出现的次数相关联。count()类似于列表的内置reduce函数。在for x in word_list
if x == x[::-1] # cool logic, btw
}
顺便说一下,我只是做你的作业,因为我从来没有做过我的作业。在
更慢、更不灵活、更不可移植、更少的awesome等效使用嵌套for循环:
我认为如果您的
map()
和reduce()
输入是一个实际的单词列表,对您来说会容易得多。为了实现这一点,.split()
在将其传递给map()
之前先处理字符串。然后map()
一个单词要么对其自身(如果映射器遇到回文)或None
。然后,您可以filter()
放弃None
值,对其进行排序并将其传递给reduce()
。reduce()
然后将其减少为dict
将单词映射到它们的总数。在我不会为你提供一个有效的解决方案,不带走学习的因素。在
相关问题 更多 >
编程相关推荐