鱼C论坛

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

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

[复制链接]
发表于 2020-2-28 19:44:44 | 显示全部楼层
优化一下
def f338(lst):
    t = set("qwertyuiop")
    m = set("asdfghjkl")
    l = set("zxcvbnm")
    n = []
    for i in lst:
        k = set(i.lower())
        if k & t == k or k & m == k or k & l == k:
            n.append(i)
    return n

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-28 19:46:19 | 显示全部楼层
zltzlt 发表于 2020-2-28 19:37
解答错误

输入:['qaz', 'wsx', 'edc', 'rfv', 'tgb', 'yhn', 'ujm', 'ik', 'pklo', 'ppppppp']

下面已改,还以为是首字母要大写的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-28 19:46:53 | 显示全部楼层

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

使用道具 举报

发表于 2020-2-28 19:57:35 | 显示全部楼层
我4,5,6楼的答案不测吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2020-2-28 19:58:14 | 显示全部楼层
本帖最后由 鱼C之斗者 于 2020-2-28 20:13 编辑

list1 = ['qwertyuiopQWERTYUIOP','asdfghjklASDFGHJKL','zxcvbnmZXCVBNM']
list2 = 'list2 = '+input('请输入一个单词列表')
exec(list2)
list2_len = len(list2)
list3 = []
a = 0
while a < list2_len:
    for b in list1:
        c = len(list2[a])
        f = 1;
        for d in range(c):
            if list2[a][d] not in b:
                f=0
                break;
        if f:
            list3.append(list2[a])
    a += 1;
if len(list3):
    print(list3)

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

使用道具 举报

发表于 2020-2-28 19:58:52 | 显示全部楼层
kinkon 发表于 2020-2-28 19:38
解题思路居然和你的很接近

很正常,有集合的想法的话,就是差集,并集,交集,子集,不用的话就一个一个字母去比照,应该没有其他方法了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2020-2-28 19:59:32 | 显示全部楼层

解答错误

输入:["asdfghjkla","qwertyuiopq","zxcvbnzzm","asdfghjkla","qwertyuiopq","zxcvbnzzm"]
输出:["asdfghjkla","qwertyuiopq","asdfghjkla","qwertyuiopq"]
预期结果:["asdfghjkla","qwertyuiopq","zxcvbnzzm","asdfghjkla","qwertyuiopq","zxcvbnzzm"]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 20:01:02 | 显示全部楼层
zltzlt 发表于 2020-2-28 19:59
解答错误

输入:["asdfghjkla","qwertyuiopq","zxcvbnzzm","asdfghjkla","qwertyuiopq","zxcvbnzzm"]
...

已改,忘了把最后的middle改为bottom

评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-2-28 20:01:51 | 显示全部楼层
fan1993423 发表于 2020-2-28 20:01
已改,忘了把最后的middle改为bottom

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

使用道具 举报

发表于 2020-2-28 20:02:37 | 显示全部楼层
难道集合中还是子集速度最快吗,本来最先想用子集的话,为了不和冬雪大佬一个思路没用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 20:12:14 | 显示全部楼层
不对啊,我交集的答案和21楼一样,为什么它才100多ms,我是400多ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-2-28 20:18:35 | 显示全部楼层
fan1993423 发表于 2020-2-28 20:12
不对啊,我交集的答案和21楼一样,为什么它才100多ms,我是400多ms

你 set() 的次数太多了,我这里用的是超大的数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 20:31:10 | 显示全部楼层
zltzlt 发表于 2020-2-28 20:18
你 set() 的次数太多了,我这里用的是超大的数据

那行嘛,以后把set()单独赋值,我没想到这种影响速度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-28 20:32:16 | 显示全部楼层
fan1993423 发表于 2020-2-28 20:31
那行嘛,以后把set()单独赋值,我没想到这种影响速度

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

使用道具 举报

发表于 2020-2-28 21:34:15 | 显示全部楼层
zltzlt 发表于 2020-2-28 18:56
解答错误

输入:["Hello", "Alaska", "Dad", "Peace"]

惊了!!虽然的确这个解答有错,但是预期结果也是个错的耶。与示例有悖逆。
我就是针对的那个 'Hello'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 22:07:25 | 显示全部楼层
本帖最后由 kinkon 于 2020-2-28 22:19 编辑

一行有点长,缩成两行,酱紫不知道会不会快一些
def p338(lst):        
    al = set("qwertyuiop"),set("asdfghjkl"),set("zxcvbnm")
    return [lst[i] for i in range(len(lst)) for j in al if set(lst[i].lower()) <= j]

一行的也加上好了
def p338(lst):
    return [lst[i] for i in range(len(lst)) for j in [set("qwertyuiop"),set("asdfghjkl"),set("zxcvbnm")] if set(lst[i].lower()) <= j]

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-28 22:22:16 | 显示全部楼层
我来晚了,看看速度
def fun338(strArr):
    Keyboard = []
    Keyboard.append('QqWwEeRrTtYyUuIiOoPp')
    Keyboard.append('AaSsDdFfGgHhJjKkLl')
    Keyboard.append('ZzXxCcVvBbNnMm')
    def inWhich(character):
        for i in range(0,3):
            if character in Keyboard[i]:
                return i
    def isWordOk(word):
        try:
           state = inWhich(word[0])
        except Exception:
            return False
        for each in set(word):
            if each not in Keyboard[state]:
                return False
        return True
    result = []
    for eachWord in strArr:
        if isWordOk(eachWord):
            result.append(eachWord)
    return result  

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-28 22:24:33 | 显示全部楼层
zltzlt 发表于 2020-2-28 18:56
解答错误

输入:["Hello", "Alaska", "Dad", "Peace"]

你这个不对呀,Hello不是同一行的吧,和实例不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 17:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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