美文网首页
412. Fizz Buzz and 463. Island P

412. Fizz Buzz and 463. Island P

作者: byr_hfaltgg | 来源:发表于2017-07-11 01:31 被阅读0次

    主要写写这两个问题在Solutions里的one line python的解法,题目本身都很容易。

    1. Fizz Buzz
    def fizzBuzz(self, n):
        return ['Fizz' * (not i % 3) + 'Buzz' * (not i % 5) or str(i) for i in range(1, n+1)]
    

    这个问题有两个特别的语法点,一个是or除了逻辑运算符的功能外,还有一个语义是返回第一个非空对象,第二个是字符串也可以用乘法(以前只知道加法。。。)

    1. Island Perimeter
    def islandPerimeter(self, grid):
        return sum(sum(map(operator.ne, [0] + row, row + [0]))
                   for row in grid + map(list, zip(*grid)))
    

    这个onelinepython着实让我想了一阵子。。。。前一个不明白的点就是map(operator.ne, [0] + row, row + [0]),后来通过各种实验和打印数据,发现这句话就是让每个grid中的row去和自己的后一位(或者理解成前一位也没问题)去做异或,然后第一位和最后一位和0做异或,之后sum起来,就是边的长度了。

    再有一个点是for row in grid + map(list, zip(grid),后面的map(list, zip(grid)我在查了zip的用法之后发现,这里就是把整个grid翻转map之后返回的就是个完全转秩的grid,然后这里for循环的row其实就是col了(当然前面的那个in grid中取得还是row)。

    真的是,很简洁的写法,但是工程中(工作的时候)我是绝对不会这么写的,虽然看起来很cooooooool!但是少写10几行代码的代价就是后人理解起来要花费10倍的时间。

    相关文章

      网友评论

          本文标题:412. Fizz Buzz and 463. Island P

          本文链接:https://www.haomeiwen.com/subject/umnlhxtx.html