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

本文共 2509 字,大约阅读时间需要 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]) # False
all_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) # True
all_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 deepcopy
from random import randint
def 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) # 3
clamp_number(1, -1, -5) # -1

9. String: byte_size

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

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

示例

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

10. Math: gcd

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

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

示例

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

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

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

你可能感兴趣的文章
Node.js 调用微信公众号 API 添加自定义菜单报错的解决方法
查看>>
node.js 配置首页打开页面
查看>>
node.js+react写的一个登录注册 demo测试
查看>>
Node.js中环境变量process.env详解
查看>>
Node.js之async_hooks
查看>>
Node.js初体验
查看>>
Node.js升级工具n
查看>>
Node.js卸载超详细步骤(附图文讲解)
查看>>
Node.js卸载超详细步骤(附图文讲解)
查看>>
Node.js基于Express框架搭建一个简单的注册登录Web功能
查看>>
node.js学习之npm 入门 —8.《怎样创建,发布,升级你的npm,node模块》
查看>>
Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅
查看>>
Node.js安装及环境配置之Windows篇
查看>>
Node.js安装和入门 - 2行代码让你能够启动一个Server
查看>>
node.js安装方法
查看>>
Node.js官网无法正常访问时安装NodeJS的方法
查看>>
node.js模块、包
查看>>
node.js的express框架用法(一)
查看>>
Node.js的交互式解释器(REPL)
查看>>
Node.js的循环与异步问题
查看>>