鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

[已解决]Python:每日一题 335

[复制链接]
 楼主| 发表于 2020-2-20 14:13:56 | 显示全部楼层
whosyourdaddy 发表于 2020-2-20 00:45
def fic(para,each):
    length = len(para)
    for i in range(length):

输入 paragraph = " ".join(['a', 'c', 'b'] * 100000), banned = ["a", "b"] 超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 14:14:59 | 显示全部楼层

解答错误

输入:paragraph = "Bob. hIt, baLl", banned = ["bob", "hit"]
输出:"bob"
预期结果:"ball"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 14:15:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 14:16:56 | 显示全部楼层

解答错误

输入:paragraph = "Bob. hIt, baLl", banned = ["bob", "hit"]
输出:"hit"
预期结果:"ball"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 14:18:07 | 显示全部楼层

输入 paragraph = "Bob!", banned = ["hit"] 出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 14:19:13 | 显示全部楼层
本帖最后由 zltzlt 于 2020-2-20 21:14 编辑
TJBEST 发表于 2020-2-20 11:19
字符串的函数除了split其他的用得不多,记不住,自己去编辑吧,锻炼一下自己的逻辑分析能力


代码真够长的

不过效率还好159 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 14:29:51 | 显示全部楼层
def nums(par, ban):
    dic = {}
    count = 0
    ban = ban.split(' ')
    par = par.split(' ')
    for word in par:
        for sym in '!?\',;.':
            if sym in word:
                word = word.replace(sym,'')
        if word in ban:
            continue
        else:
            word = word.lower()
            if word not in dic:
                dic[word] = dic.get(word,count+1)
            else:
                dic[word] += 1
    return max(dic,key=dic.get)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 14:32:32 | 显示全部楼层

表示没看懂sort括号里的东西。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 14:33:30 | 显示全部楼层

这个sort括号里的是个啥。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 14:36:39 | 显示全部楼层
qq614704680 发表于 2020-2-20 14:33
这个sort括号里的是个啥。

是匿名函数,告诉程序把list2以list1的元素数量counts排序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 14:44:48 | 显示全部楼层
zltzlt 发表于 2020-2-20 14:14
解答错误

输入:paragraph = "Bob. hIt, baLl", banned = ["bob", "hit"]

缩成一行时犯了个小错误,改正了
from collections import Counter   
def p335(p,b):
    lt = [i.strip("!?',;.") for i in p.lower().split() if i.strip("!?',;.") not in b]
    return Counter(lt).most_common(1)[0][0]

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 14:52:32 | 显示全部楼层
kinkon 发表于 2020-2-20 14:44
缩成一行时犯了个小错误,改正了

可以了,56 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 14:55:29 | 显示全部楼层
zltzlt 发表于 2020-2-20 14:05
你这一句什么意思?

搞错了,那一句是没有的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 14:57:18 | 显示全部楼层
一个账号 发表于 2020-2-20 14:55
搞错了,那一句是没有的

嗯,解决一下超时的问题吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 15:00:25 | 显示全部楼层
zltzlt 发表于 2020-2-20 14:08
输入 paragraph = " ".join(['a', 'c', 'b'] * 100000), banned = ["a", "b"] 超时

搞不懂为什么会超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 15:30:30 | 显示全部楼层
zltzlt 发表于 2020-2-20 14:57
嗯,解决一下超时的问题吧


原来 remove() 效率这么低,改了一下代码:
def fun(paragraph : str, banned : list) -> str:
    paragraph = paragraph.lower() 
    pun = "!?',;."
    list1 = []
    count = {}
 
    paragraph = paragraph.split(" ")

    for each in paragraph:
        if each not in list1 and each not in banned:
            list1.append(each)

    for each in list1:
        count[paragraph.count(each)] = each
            
    return count.get(max(count))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 15:30:53 | 显示全部楼层
zltzlt 发表于 2020-2-20 14:12
解答错误

输入:paragraph = "abc abc? abcd the jeff!", banned = ["abc","abcd","jeff"]

越写越纠结
import re
def func335(paragraph, banned):
    paragraph = re.sub(r"[!|?|'|,|;|.]", '', paragraph.lower())
    for each in banned:
        p = re.compile(r'\b%s\b' % each)
        paragraph = p.sub('', paragraph)
    result = paragraph.split()
    return max(result, key=result.count)

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zltzlt + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 15:31:41 | 显示全部楼层
一个账号 发表于 2020-2-20 15:30
原来 remove() 效率这么低,改了一下代码:

解答错误

输入:paragraph = "Bob hit a ball, the hit BALL flew far after it was hit." 和 banned = ["hit"]
输出:"hit."
预期结果:"ball"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 15:32:41 | 显示全部楼层

输入 paragraph = " ".join(['a', 'c', 'b'] * 100000), banned = ["a", "b"] 超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 15:34:29 | 显示全部楼层
def solve(s:str, ban):
    d, e = {}, ''
    for i in s:
        if i not in [' ','!','?',',',';','.',"'"]:
            e += i
        else:
            e = e.lower()
            if d.get(e) and e:
                d[e] += 1
            elif not d.get(e) and e not in ban and e:
                d[e] = 1
            e = ''
    if e and e not in ban:
        d[e] = 1
    res = sorted(d.items(), key = lambda x : -x[1])
    return res[0][0] if res else ''
print(solve("Bob. hIt, baLl", ["bob", "hit"]))
paragraph = " ".join(['a', 'c', 'b'] * 100000), banned = ["a", "b"]
这个测试用例不正确吧,paragaph应该是字符串啊,
感觉我这个效率应该不算高
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-24 17:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表