Python中的Map reduce问题

2024-04-29 13:59:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正忙于一项任务。该解决方案将输入一个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', '']])

我走对了吗?在


Tags: 文件txtmapreduce数量解决方案listslist
3条回答

对于reduce函数,应该从一个空dict开始并更新/填充计数。Reduce函数需要两个参数,因此一个可以是dict,另一个是回文。可以在reduce中输入初始值,如下所示:

reduce(lambda x, y: x+y, some_list, initial_value_for_x)

看看dict's get如何设置默认值,这将有助于简化reduce函数。在

在映射字符串之前,将字符串拆分为一个列表。map()用于列表、集合和dict,不是字符串。在

word_list = words_str.split(" ")

避免使用map filter reduce,除非您的赋值指定它;GVRsays so。正确的解决方案使用Python的list comprehension语法。事实上,你可以用一个非常讨厌的单句话:

^{pr2}$

分解它。。。在

  1. 在dictionary对象中捕获它以便稍后打印:pal_count = {
  2. 定义返回对象:x: word_list.count(x)我们使用键:值语法将回文(x)与其出现的次数相关联。count()类似于列表的内置reduce函数。在
  3. 用一个for循环遍历我们的列表,将当前值赋给'x':for x in word_list
  4. 我们只想返回回文,所以我们添加了一个比较运算符到filterout坏值:if x == x[::-1] # cool logic, btw
  5. 万岁!}

顺便说一下,我只是做你的作业,因为我从来没有做过我的作业。在

更慢、更不灵活、更不可移植、更少的awesome等效使用嵌套for循环:

pal_count = dict()
for x in word_list:                     # same loop
    if x == x[::-1]                     # is this a palindrome?
        if x in pal_count:              # have we seen before?
            pal_count[x] += 1
        else:                           # this one is new!
            pal_count.setdefault(x, 1)

我认为如果您的map()reduce()输入是一个实际的单词列表,对您来说会容易得多。为了实现这一点,.split()在将其传递给map()之前先处理字符串。然后map()一个单词要么对其自身(如果映射器遇到回文)或None。然后,您可以filter()放弃None值,对其进行排序并将其传递给reduce()reduce()然后将其减少为dict将单词映射到它们的总数。在

我不会为你提供一个有效的解决方案,不带走学习的因素。在

相关问题 更多 >