博客
关于我
震惊了!每30秒学会一个Python小技巧,Github星数4600+
阅读量:151 次
发布时间:2019-02-27

本文共 2481 字,大约阅读时间需要 8 分钟。

很多学习Python的朋友在项目实战中会遇到不少功能实现上的问题,有些问题并不是很难,但却有一些巧妙的解决方法。对于刚熟悉Python的同学来说,这些技巧可能并不容易掌握,但只要熟练掌握后,项目效率会有很大提升。

最近,我发现了一份非常实用的资源——"30-seconds-of-python"。这个资源可以让你在30秒内掌握各种Python技巧,非常适合在业务时间里不断积累。

以下是30秒学Python的目录,涵盖了List、Math、Object、String、Utility等多个板块。我们将从中挑选10个实用且有趣的方法分享给大家,其他方法可以根据需要自行探索。

1. List: all_equal

功能实现:检查列表中所有元素是否相同。解读:比较列表从第二个元素到倒数第二个元素的子列表与整个列表是否相同。

def all_equal(lst): return lst[1:] == lst[:-1]

示例

all_equal([1, 2, 3, 4, 5, 6]) # Falseall_equal([1, 1, 1, 1]) # True

2. List: all_unique

功能实现:检查列表中的所有元素是否唯一。解读:将列表转换为集合,比较集合的长度与列表的长度。

def all_unique(lst): return len(lst) == len(set(lst))

示例

x = [1,2,3,4,5,6] y = [1,2,2,3,4,5]all_unique(x) # Trueall_unique(y) # False

3. List: bifurcate

功能实现:将列表分成两组,基于布尔值分割。解读:使用列表推导式和enumerate()函数,根据布尔值将元素分配到两组。

def bifurcate(lst, filter): return [    [x for i,x in enumerate(lst) if filter[i]],    [x for i,x in enumerate(lst) if not filter[i]]]

示例

bifurcate(['beep', 'boop', 'foo', 'bar'], [True, True, False, True]) # [['beep', 'boop', 'bar'], ['foo']]

4. List: difference

功能实现:返回两个可迭代对象之间的差异。解读:将第二个可迭代对象转换为集合,遍历第一个可迭代对象保留不在集合中的元素。

def difference(a, b): _b = set(b); return [item for item in a if item not in _b]

示例

difference([1, 2, 3], [1, 2, 4]) # [3]

5. List: flatten

功能实现:将嵌套列表一次性展开。解读:使用列表推导式遍历嵌套列表的每个子列表。

def flatten(lst): return [x for y in lst for x in y]

示例

flatten([[1,2,3,4],[5,6,7,8]]) # [1, 2, 3, 4, 5, 6, 7, 8]

6. Math: digitize

功能实现:将数字转换为各位数字列表。解读:将数字转换为字符串,然后使用map()函数和整数转换。

def digitize(n): return list(map(int, str(n)))

示例

digitize(123) # [1, 2, 3]

7. List: shuffle

功能实现:随机打乱列表元素。解读:使用Fisher-Yates算法重新排列列表。

from copy import deepcopyfrom random import randintdef shuffle(lst):     temp_lst = deepcopy(lst)    m = len(temp_lst)    while m:        m -= 1        i = randint(0, m)        temp_lst[m], temp_lst[i] = temp_lst[i], temp_lst[m]    return temp_lst

示例

foo = [1,2,3] shuffle(foo) # [2,3,1]

8. Math: clamp_number

功能实现:将数字钳制在指定范围内。解读:使用min()和max()函数将数字限制在给定范围内。

def clamp_number(num,a,b): return max(min(num, max(a,b)), min(a,b))

示例

clamp_number(2, 3, 5) # 3clamp_number(1, -1, -5) # -1

9. String: byte_size

功能实现:返回字符串的字节数。解读:使用字符串的编码方法获取字节数。

def byte_size(string): return len(string.encode('utf-8'))

示例

byte_size('?') # 4byte_size('Hello World') # 11

10. Math: gcd

功能实现:计算多个数字的最大公因数。解读:使用reduce()和math.gcd函数。

from functools import reduceimport mathdef gcd(numbers): return reduce(math.gcd, numbers)

示例

gcd([8,36,28]) # 4

以上就是30秒学Python的各种小技巧。这些方法对于日常开发中的各种问题都有很好的应用场景。希望这些技巧能为你的Python学习之路带来一些帮助!

转载地址:http://plsd.baihongyu.com/

你可能感兴趣的文章
nodejs图片转换字节保存
查看>>
nodejs在Liunx上的部署生产方式-PM2
查看>>
nodejs字符与字节之间的转换
查看>>
NodeJs学习笔记001--npm换源
查看>>
NodeJs学习笔记002--npm常用命令详解
查看>>
nodejs学习笔记一——nodejs安装
查看>>
NodeJS实现跨域的方法( 4种 )
查看>>
nodejs封装http请求
查看>>
nodejs常用组件
查看>>
nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
查看>>
Nodejs异步回调的处理方法总结
查看>>
NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
查看>>
Nodejs教程09:实现一个带接口请求的简单服务器
查看>>
nodejs服务端实现post请求
查看>>
nodejs框架,原理,组件,核心,跟npm和vue的关系
查看>>
Nodejs概览: 思维导图、核心技术、应用场景
查看>>
nodejs模块——fs模块
查看>>
Nodejs模块、自定义模块、CommonJs的概念和使用
查看>>
nodejs生成多层目录和生成文件的通用方法
查看>>
nodejs端口被占用原因及解决方案
查看>>