kinkon 发表于 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

kinkon 发表于 2020-2-28 19:46:19

zltzlt 发表于 2020-2-28 19:37
解答错误

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


下面已改,还以为是首字母要大写的{:10_247:}

zltzlt 发表于 2020-2-28 19:46:53

kinkon 发表于 2020-2-28 19:44
优化一下

108 ms

fan1993423 发表于 2020-2-28 19:57:35

我4,5,6楼的答案不测吗?

zltzlt 发表于 2020-2-28 19:58:10

fan1993423 发表于 2020-2-28 17:18
差集

300 ms

鱼C之斗者 发表于 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)
      f = 1;
      for d in range(c):
            if list2 not in b:
                f=0
                break;
      if f:
            list3.append(list2)
    a += 1;
if len(list3):
    print(list3)

fan1993423 发表于 2020-2-28 19:58:52

kinkon 发表于 2020-2-28 19:38
解题思路居然和你的很接近

很正常,有集合的想法的话,就是差集,并集,交集,子集,不用的话就一个一个字母去比照,应该没有其他方法了

zltzlt 发表于 2020-2-28 19:59:03

fan1993423 发表于 2020-2-28 17:20
交集

468 ms

zltzlt 发表于 2020-2-28 19:59:32

fan1993423 发表于 2020-2-28 17:21
并集

解答错误

输入:["asdfghjkla","qwertyuiopq","zxcvbnzzm","asdfghjkla","qwertyuiopq","zxcvbnzzm"]
输出:["asdfghjkla","qwertyuiopq","asdfghjkla","qwertyuiopq"]
预期结果:["asdfghjkla","qwertyuiopq","zxcvbnzzm","asdfghjkla","qwertyuiopq","zxcvbnzzm"]

fan1993423 发表于 2020-2-28 20:01:02

zltzlt 发表于 2020-2-28 19:59
解答错误

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

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

zltzlt 发表于 2020-2-28 20:01:51

fan1993423 发表于 2020-2-28 20:01
已改,忘了把最后的middle改为bottom

嗯嗯,558 ms

fan1993423 发表于 2020-2-28 20:02:37

难道集合中还是子集速度最快吗{:10_250:},本来最先想用子集的话,为了不和冬雪大佬一个思路没用{:10_250:}{:10_245:}

fan1993423 发表于 2020-2-28 20:12:14

不对啊,我交集的答案和21楼一样,为什么它才100多ms,我是400多ms

zltzlt 发表于 2020-2-28 20:18:35

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

你 set() 的次数太多了,我这里用的是超大的数据

fan1993423 发表于 2020-2-28 20:31:10

zltzlt 发表于 2020-2-28 20:18
你 set() 的次数太多了,我这里用的是超大的数据

那行嘛,以后把set()单独赋值,我没想到这种影响速度

zltzlt 发表于 2020-2-28 20:32:16

fan1993423 发表于 2020-2-28 20:31
那行嘛,以后把set()单独赋值,我没想到这种影响速度

{:10_250:}

阴阳神万物主 发表于 2020-2-28 21:34:15

zltzlt 发表于 2020-2-28 18:56
解答错误

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


惊了!!虽然的确这个解答有错,但是预期结果也是个错的耶。与示例有悖逆。
我就是针对的那个 'Hello'

kinkon 发表于 2020-2-28 22:07:25

本帖最后由 kinkon 于 2020-2-28 22:19 编辑

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

一行的也加上好了{:10_279:}
def p338(lst):
    return for i in range(len(lst)) for j in if set(lst.lower()) <= j]

TJBEST 发表于 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:
                return i
    def isWordOk(word):
      try:
         state = inWhich(word)
      except Exception:
            return False
      for each in set(word):
            if each not in Keyboard:
                return False
      return True
    result = []
    for eachWord in strArr:
      if isWordOk(eachWord):
            result.append(eachWord)
    return result

TJBEST 发表于 2020-2-28 22:24:33

zltzlt 发表于 2020-2-28 18:56
解答错误

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


你这个不对呀,Hello不是同一行的吧,和实例不一样
页: 1 [2] 3 4
查看完整版本: Python:每日一题 338