python-小知识点 ---一行代码能干嘛

一行python代码到底能干嘛

一般而言,Python的one-liner 要不就是用到比较好的库文件,要不就是用到一些函数式的特性以及list comprehension等,但是最好不要设计太过复杂的逻辑,不然真的是能做到丧心病狂 …

根据网上查找,部分修改汇总记录

初级

  • 九九乘法表
print('\n'.join([' '.join(['%s*%s=%-2s' % (y, x, x*y) for y in range(1, x+1)]) for x in range(1, 10)]))

输出

1*1=1 
1*2=2  2*2=4 
1*3=3  2*3=6  3*3=9 
1*4=4  2*4=8  3*4=12 4*4=16
1*5=5  2*5=10 3*5=15 4*5=20 5*5=25
1*6=6  2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7  2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8  2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9  2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
  • 迷宫
    得找个不显示中间空格的方式,只能用图片代替了
mg = lambda s, row, col: ''.join(__import__('random').choice(s) if i else '\n' for _ in range(row) for i in range(col))
print(mg('╱╲', 40, 60))

╲╱╲╱╱╲╲╲╱╱╲╲╲╲╲╲╱╲╲╱╲╲╱╱╲╱╱╱╲╱╲╲╱╱╲╱╲╲╱╱╱╱╱╱╱╱╲╲╲╱╱╱╱╲╱╲╲╲╲╱╱╱╲╱╱╱╱╱╲╲╲╲╲╱╱╱╲╲╱╲╱╱╱╱╲╲╱╱╱╱╱╲╲╱╲╱╱╲╱╲╱╱╲╲╲╱╱╱╲╲╱╲╲╱╱╲╱╱╱╲╱╲╲╲╲╱╱╲╱╱╱╱╲╱╱╲╲╲╲╲╲╲╱╲╱╲╲╱╲╱╲╲╲╱╲╱╱╱╲╱╱╱╱╱╲╲╱╲╱╱╱╱╱╲╱╱╱╱╲╱╲╲╲╱╱╲╱╱╲╱╱╱╱╲╲╱╱╱╱╱╲╲╲╱╲╱╲╱╱╲╱╲╱╲╱╱╲╱╱╱╱╱╲╱╱╲╱╲╱╱╱╱╱╲╱╲╲╲╲╲╲╲╲╲╲╱╱╱╱╲╲╲╱╱╱╲╲╲╲╲╱╱╱╲╲╱╲╲╱╱╲╲╱╲╲╱╱╱╲╱╱╲╲╲╱╲╱╱╲╱╲╱╲╱╱╱╲╱╱╲╱╱╲╱╱╲╱╱╱╲╲╲╱╲╲╲╱╱╲╲╲╲╱╱╲╱╱╱╱╱╲╱╲╲╲╱╱╲╲╱╲╱╲╲╱╱╱╲╱╲╱╲╱╲╱╲╱╲╲╲╱╲╱╲╱╲╲╲╲╲╲╱╱╲╱╱╲╲╲╲╱╱╲╲╱╲╱╱╱╲╲╲╲╱╲╲╱╱╱╱╱╱╱╲╲╲╱╱╲╲╱╱╲╱╱╱╲╲╱╲╲╲╱╲╱╲╲╲╱╱╲╲╱╲╲╲╱╲╱╱╲╱╱╲╲╱╲╱╲╱╲╲╱╱╲╲╱╲╱╱╲╲╲╱╲╲╲╱╱╱╱╱╲╲╱╲╲╲╲╱╱╲╲╱╱╲╲╱╲╱╲╲╱╱╲╱╲╲╲╲╲╱╲╲╲╱╲╱╱╲╱╱╲╱╲╲╱╱╲╱╲╱╲╱╱╱╲╲╲╲╲╲╲╲╲╱╲╱╱╲╲╱╱╲╲╲╲╲╲╲╱╱╲╱╱╲╲╱╲╲╲╲╱╱╲╲╲╲╱╱╱╲╲╲╲╲╱╱╱╲╱╱╱╲╲╱╱╱╱╱╱╱╱╱╲╱╲╱╱╲╱╱╱╱╲╲╱╲╱╱╲╲╱╱╱╱╲╱╲╱╲╲╲╱╱╲╲╲╲╲╱╱╲╱╱╱╲╲╱╱╱╱╲╱╱╲╲╱╱╱╱╱╱╱╲╱╱╲╱╲╱╲╱╱╲╱╱╲╱╲╲╲╲╱╱╲╱╲╱╱╲╲╲╱╱╱╱╲╲╲╱╱╲╲╲╱╱╲╲╱╱╲╲╱╲╱╱╲╲╱╲╱╱╱╲╱╱╱╲╱╲╲╲╲╲╲╲╱╲╱╱╲╱╱╲╲╲╱╲╱╱╲╲╲╲╱╱╱╲╲╱╱╱╲╱╱╲╱╱╱╲╲╲╲╲╲╲╱╱╲╱╲╱╱╱╲╲╲╱╱╱╱╲╱╱╲╱╱╲╱╱╲╲╲╱╲╲╲╱╱╲╲╱╲╲╱╲╱╲╲╱╱╱╲╲╱╲╲╱╲╲╲╱╲╲╱╱╱╲╱╲╲╱╱╱╲╱╲╱╲╲╲╱╱╱╱╱╲╱╱╲╲╱╱╱╲╱╱╲╱╲╱╲╲╲╲╲╱╱╲╲╲╲╲╱╲╲╲╱╲╱╲╱╲╱╲╲╱╲╱╲╱╲╱╱╲╲╱╱╲╲╲╲╱╲╱╲╲╲╲╲╲╲╲╱╲╲╲╱╲╲╱╱╲╱╲╱╲╲╱╲╲╱╱╱╲╱╱╲╱╱╱╲╲╱╱╲╲╱╱╱╲╱╲╲╱╱╱╱╲╱╱╱╲╲╲╱╱╲╲╲╲╲╱╱╱╱╲╲╲╱╱╲╱╱╱╲╱╱╱╱╲╲╲╱╱╱╱╱╲╱╲╲╲╱╱╲╱╱╲╱╲╱╱╱╲╱╲╲╱╱╲╱╲╲╲╲╲╱╱╲╲╲╱╲╱╱╲╱╱╱╲╱╱╲╱╲╱╲╱╲╲╲╲╲╲╲╲╱╱╱╲╱╱╲╱╲╱╲╲╲╱╱╱╲╱╱╱╱╲╱╲╱╱╲╱╲╲╲╲╱╲╲╲╲╲╲╱╱╱╱╲╱╲╱╲╱╲╲╲╱╱╲╲╱╱╱╱╲╱╱╱╲╲╱╲╲╱╱╱╱╱╱╲╲╲╲╲╲╱╱╲╲╱╱╱╱╱╲╲╱╱╱╱╲╲╲╱╲╱╱╲╱╱╲╱╲╲╱╲╲╲╲╲╱╱╲╲╲╲╱╲╱╲╱╱╱╲╱╱╱╲╲╱╱╱╱╲╲╲╱╱╱╱╲╱╲╱╲╲╱╱╲╱╲╲╱╲╲╲╱╱╲╱╲╲╲╲╱╱╱╱╱╱╱╲╲╲╱╲╱╲╱╲╱╱╱╱╱╲╲╲╱╱╱╲╲╱╱╱╲╱╲╱╱╱╱╱╱╱╱╲╱╱╱╲╱╲╲╲╲╱╲╲╱╱╱╲╱╲╱╱╲╲╲╲╱╱╲╱╲╲╱╲╲╲╱╱╲╲╲╲╲╲╲╲╱╱╱╱╱╱╲╱╱╲╱╱╱╱╲╱╲╱╱╲╲╲╲╲╱╲╲╱╱╲╱╲╲╱╲╱╲╲╲╱╱╲╲╱╲╱╲╲╲╲╱╲╱╱╲╲╲╱╲╲╱╱╱╱╱╱╱╲╲╲╲╱╲╱╲╱╲╲╲╱╱╱╱╱╱╱╲╱╱╱╱╲╲╲╱╲╱╱╲╱╱╲╲╲╱╱╱╲╲╲╲╱╱╲╱╱╲╱╱╱╲╱╱╲╲╲╲╱╲╲╲╱╱╱╲╱╲╱╲╱╲╲╱╲╲╲╲╱╲╲╲╲╲╲╲╱╲╲╱╲╲╲╱╱╲╲╱╱╲╱╲╱╲╱╱╱╲╲╱╱╱╱╲╱╲╱╱╱╱╲╱╲╱╲╱╲╱╱╲╲╲╱╲╱╲╱╲╱╲╱╱╱╱╲╱╱╲╲╱╲╲╲╱╲╱╱╲╲╱╱╲╱╱╲╲╱╱╲╲╱╲╱╲╱╱╲╲╲╱╲╱╲╲╲╲╱╱╱╲╱╱╲╲╱╱╱╱╱╱╲╲╲╲╲╱╱╲╲╱╲╱╱╱╱╲╱╲╲╲╲╱╱╲╲╱╲╱╲╱╲╲╲╲╲╱╲╱╲╱╲╱╲╲╱╱╱╱╱╲╲╱╱╲╱╱╱╱╲╲╲╲╱╲╱╲╲╲╲╱╱╱╱╲╲╲╲╲╱╱╱╲╲╱╲╲╱╲╲╲╲╱╱╱╱╲╱╲╱╱╱╱╲╱╱╲╱╲╲╲╲╲╲╱╲╱╲╱╲╱╲╲╲╲╱╲╲╲╱╱╲╲╲╲╱╲╲╱╱╱╱╱╱╱╲╲╱╱╱╱╲╱╲╲╱╱╱╱╲╲╱╲╱╲╱╲╲╲╲╱╲╲╲╱╲╲╲╲╲╱╲╱╱╲╲╲╱╱╲╲╱╲╲╲╱╲╲╱╱╱╲╱╲╲╱╲╱╲╲╲╲╲╱╲╱╲╲╱╱╱╲╲╱╱╱╱╱╱╱╲╲╲╱╱╲╱╲╱╱╲╲╱╱╲╲╱╲╲╱╲╲╱╱╱╱╱╱╲╲╲╱╲╲╱╲╲╱╲╲╲╲╲╱╲╲╲╲╱╱╲╲╲╱╱╲╲╲╱╱╲╲╱╱╲╲╲╱╱╱╱╲╲╲╱╱╲╱╲╱╲╱╲╲╲╱╲╱╱╱╱╱╲╱╲╲╱╲╱╱╲╱╱╲╲╱╱╲╲╱╱╲╲╱╱╲╲╲╱╲╱╲╱╱╱╱╲╱╲╲╱╱╱╱╱╱╲╲╱╲╲╲╲╲╲╱╱╱╲╲╱╱╲╱╱╱╱╲╱╱╲╱╱╱╲╱

  • FizzBuzz的问题
    整数 1 到 n , 如果被3整除,打印Fizz; 被5整除,打印Buzz;同时被3和5整除,打印FizzBuzz
fb = lambda y: ["Fizz"[ x % 3 * 4:] + "Buzz"[x % 5 * 4:] or str(x) for x in range(1, y)]
print(fb(33))

输出

['1', '2', 'Fizz', '4', 'Buzz', 'Fizz', '7', '8', 'Fizz', 'Buzz', '11', 'Fizz', '13', '14', 'FizzBuzz', '16', '17', 'Fizz', '19', 'Buzz', 'Fizz', '22', '23', 'Fizz', 'Buzz', '26', 'Fizz', '28', '29', 'FizzBuzz', '31', '32']

进阶

  • 求素数
    求素数两种写法
prime = lambda y: [item for item in filter(lambda x: not [x % i for i in range(2, x) if x % i == 0], range(2, y))]
print(prime(100))
prime = lambda y: [item for item in filter(lambda x: all(map(lambda p: x % p != 0, range(2, x))), range(2, y))]
print(prime(100))

输出100内的

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
  • 求斐波拉契数
fibonacci = lambda y: [x[0] for x in [ (a[i][0], a.append((a[i][1], a[i][0]+a[i][1]))) for a in ([[1,1]], ) for i in range(y)]]
print(fibonacci(20))

输出前20个斐波拉契数

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
  • 输入数输出阶乘
    注意库functools导入方式
jc = lambda f: f.reduce(lambda x, y: x * y, range(1, int(input('输入一个数:')) + 1))
print(jc(__import__('functools')))

输入5,输出

120
  • 将多维数组转化为一维和类似反功能
flatten = lambda x: [y for l in x for y in flatten(l)] if isinstance(x, list) else [x]
array = lambda x: [x[i:i+int(len(x)**0.5)] for i in range(0, len(x), int(len(x)**0.5))]

a = [[1,2,3], [4,5,6], [7,8,9]]
print(flatten(a))
print(array(flatten(a)))

输出

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
  • 画爱心
    注意控制行和列数,可以自己调整
love = lambda s: '\n'.join([''.join([(s[(x-y) % len(s)] if ((x*0.05)**2 + (y*0.12)**2-1)**3 - (x*0.05)**2*(y*0.12)**3 <= 0 else ' ') for x in range(-24, 24)]) for y in range(12, -12, -1)])

print(love('ylLoveYL'))

输出

                                                 
                                                
          ylLoveYLy           veYLylLov         
      eYLylLoveYLylLove   lLoveYLylLoveYLyl     
    veYLylLoveYLylLoveYLylLoveYLylLoveYLylLov   
   veYLylLoveYLylLoveYLylLoveYLylLoveYLylLoveY  
  veYLylLoveYLylLoveYLylLoveYLylLoveYLylLoveYLy 
  eYLylLoveYLylLoveYLylLoveYLylLoveYLylLoveYLyl 
  YLylLoveYLylLoveYLylLoveYLylLoveYLylLoveYLylL 
  LylLoveYLylLoveYLylLoveYLylLoveYLylLoveYLylLo 
   lLoveYLylLoveYLylLoveYLylLoveYLylLoveYLylLo  
   LoveYLylLoveYLylLoveYLylLoveYLylLoveYLylLov  
    veYLylLoveYLylLoveYLylLoveYLylLoveYLylLov   
      LylLoveYLylLoveYLylLoveYLylLoveYLylLo     
       lLoveYLylLoveYLylLoveYLylLoveYLylLo      
         veYLylLoveYLylLoveYLylLoveYLylL        
            ylLoveYLylLoveYLylLoveYLy           
              oveYLylLoveYLylLoveYL             
                 LylLoveYLylLove                
                     veYLylL                    
                        y   

高级

  • 快排
    注意递归
qsort = lambda arr: len(arr) > 1 and qsort(list(filter(lambda x: x <= arr[0], arr[1:]))) + arr[0:1] + qsort(list(filter(lambda x: x > arr[0], arr[1:]))) or arr
a = [12, 13, 6, 9, 34, 10, 28, 9, 4, 19, 17]
print(qsort(a))

输出

[4, 6, 9, 9, 10, 12, 13, 17, 19, 28, 34]
  • 阶乘-高级
    实现了递归
factorial = (lambda a: lambda v: a(a)(v))(lambda s: lambda x: 1 if x == 0 else x*s(s)(x-1))  
print(factorial(5)) # 120
  • 画Mandelbrot图像
    Mandelbrot图像中的每个位置都对应于公式N=x+y*i中的一个复数
print('\n'.join([''.join(['*'if abs((lambda a:lambda z,c,n:a(a,z,c,n))(lambda s,z,c,n:z if n==0else s(s,z*z+c,c,n-1))(0,0.02*x+0.05j*y,40))<2 else' 'for x in range(-80,20)])for y in range(-20,20)]))

输出

                                                                                *                   
                                                                                                    
                                                                                                    
                                                                          **                        
                                                                     ***********                    
                                                                    ************                    
                                                                      *********                     
                                                            *    * ************  * *                
                                                    ****** * *************************** *          
                                                    *************************************** *****   
                                                     *******************************************    
                                               *** ******************************************** *   
                                                **************************************************  
                                             *******************************************************
                      *        *              ***************************************************** 
                     **** ******* *          *******************************************************
                      *****************     ******************************************************* 
                   *********************** *********************************************************
                   *********************** ******************************************************** 
             **** ********************************************************************************  
*********************************************************************************************       
             **** ********************************************************************************  
                   *********************** ******************************************************** 
                   *********************** *********************************************************
                      *****************     ******************************************************* 
                     **** ******* *          *******************************************************
                      *        *              ***************************************************** 
                                             *******************************************************
                                                **************************************************  
                                               *** ******************************************** *   
                                                     *******************************************    
                                                    *************************************** *****   
                                                    ****** * *************************** *          
                                                            *    * ************  * *                
                                                                      *********                     
                                                                    ************                    
                                                                     ***********                    
                                                                          **   

丧心病狂

(lambda __builtin: (lambda __print, __y, d: [(lambda ___: None)(d.guess_my_number(42)) for d.guess_my_number in [(lambda n:[(__y(lambda __this: (lambda d: (lambda __after: [(lambda __after: (lambda ___: __after(d))(__print('Not a positive integer!')) if (d.len(d.user_input)==0 or (not d.user_input.isdigit())) else [(lambda __after: (lambda ___: __after(d))(__print('Too big! Try again!')) if d.user_input>d.n else (lambda __after: (lambda ___: __after(d))(__print('Too small! Try again!')) if d.user_input<d.n else (lambda ___: True) (__print('You win!')))(lambda d: __after(d)))(lambda d: __after(d)) for d.user_input in [(d.int(d.user_input))]][0])(lambda d: __this(d)) for d.user_input in [(d.input('Enter a positive integer to guess: '))]][0] if True else __after(d))(lambda d: None))))(d) for d.n in [(n)]][0])]][0])(__builtin.__dict__['print'],(lambda f: (lambda x: x(x))(lambda y: f(lambda *args: y(y)(*args)))),type('StateDict',(),__builtin.__dict__)()))(__import__('builtins'))

其实就是下面这一段代码,看看就好,不要头疼

def guess_my_number(n):
    while True:
        user_input = input("Enter a positive integer to guess: ")
        if len(user_input)==0 or not user_input.isdigit():
            print("Not a positive integer!")
        else:
            user_input = int(user_input)
            if user_input > n:
                print("Too big! Try again!" )
            elif user_input < n:
                print("Too small! Try again!")
            else:
                print("You win!")
                return True
guess_my_number(42)

总结

其实,只要你有耐心,够细心,不怕死,任何代码用lambda都可以包裹到一行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值