30秒学会30个超实用Python代码片段【收藏版】


Posted in Python onOctober 15, 2019

许多人在数据科学、机器学习、web开发、脚本编写和自动化等领域中都会使用Python,它是一种十分流行的语言。

Python流行的部分原因在于简单易学。

本文将简要介绍30个简短的、且能在30秒内掌握的代码片段。

1. 唯一性

以下方法可以检查给定列表是否有重复的地方,可用set()的属性将其从列表中删除。

def all_unique(lst):
  return len(lst) == len(set(lst))
x = [1,1,2,2,3,2,3,4,5,6]
y = [1,2,3,4,5]
all_unique(x) # False
 
all_unique(y) # True

2. 变位词(相同字母异序词)

此方法可用于检查两个字符串是否为变位词。

from collections import Counter
def anagram(first, second):
 return Counter(first) == Counter(second)
anagram("abcd3", "3acdb") # True

3. 内存

此代码段可用于检查对象的内存使用情况。

import sys 
variable = 30 
print(sys.getsizeof(variable)) # 24

4. 字节大小

此方法可输出字符串的字节大小。

def byte_size(string):
  return(len(string.encode('utf-8')))
byte_size('?') # 4
byte_size('Hello World') # 11

5. 打印N次字符串

此代码段无需经过循环操作便可多次打印字符串。

n = 2; 
s ="Programming"; 
print(s * n); # ProgrammingProgramming

6. 首字母大写

以下代码片段只利用了title(),就能将字符串中每个单词的首字母大写。

s = "programming is awesome"
print(s.title()) # Programming Is Awesome

7. 列表细分

该方法将列表细分为特定大小的列表。

def chunk(list, size):
   return [list[i:i+size] for i in range(0,len(list), size)]

8. 压缩

以下代码使用filter()从,将错误值(False、None、0和“ ”)从列表中删除。

def compact(lst):
  return list(filter(bool, lst))
compact([0, 1, False, 2, '', 3, 'a', 's', 34]) # [ 1, 2, 3, 'a', 's', 34 ]

9. 计数

以下代码可用于调换2D数组排列。

array = [['a', 'b'], ['c', 'd'], ['e', 'f']]
transposed = zip(*array)
 
print(transposed) # [('a', 'c', 'e'), ('b', 'd', 'f')]

10. 链式比较

以下代码可对各种运算符进行多次比较。

a = 3
print( 2 < a < 8) # True
print(1 == a < 2) # False

11. 逗号分隔

此代码段可将字符串列表转换为单个字符串,同时将列表中的每个元素用逗号隔开。

hobbies = ["basketball", "football", "swimming"]
print("My hobbies are: " + ", ".join(hobbies)) # My hobbies are: basketball, football, swimming

12. 元音计数

此方法可计算字符串中元音(“a”、“e”、“i”、“o”、“u”)的数目。

import re
def count_vowels(str):
  return len(len(re.findall(r'[aeiou]', str, re.IGNORECASE))
count_vowels('foobar') # 3
count_vowels('gym') # 0

13. 首字母小写

此方法可将给定字符串的首字母转换为小写模式。

def decapitalize(string):
   return str[:1].lower() + str[1:]
decapitalize('FooBar') # 'fooBar'
decapitalize('FooBar') # 'fooBar'

14. 展开列表

下列代码采用了递归法展开潜在的深层列表。

def spread(arg):
  ret = []
  for i in arg:
    if isinstance(i, list):
      ret.extend(i)
    else:
      ret.append(i)
  return ret
def deep_flatten(lst):
  result = []
  result.extend(
    spread(list(map(lambda x: deep_flatten(x) if type(x) == list else x, lst))))
  return result
deep_flatten([1, [2], [[3], 4], 5]) # [1,2,3,4,5]

15. 寻找差异

此方法仅保留第一个迭代中的值来查找两个迭代之间的差异

def difference(a, b):
  set_a = set(a)
  set_b = set(b)
  comparison = set_a.difference(set_b)
  return list(comparison)
difference([1,2,3], [1,2,4]) # [3]

16. 输出差异

以下方法利用已有函数,寻找并输出两个列表之间的差异。

def difference_by(a, b, fn):
  b = set(map(fn, b))
  return [item for item in a if fn(item) not in b]
from math import floor
difference_by([2.1, 1.2], [2.3, 3.4],floor) # [1.2]
difference_by([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], lambda v : v['x']) # [ { x: 2 } ]

17. 链式函数调用

以下方法可以实现在一行中调用多个函数

def add(a, b):
  return a + b
def subtract(a, b):
  return a ? b
a, b = 4, 5
print((subtract if a > b else add)(a, b)) # 9

18. 重复值存在与否

以下方法利用set()只包含唯一元素的特性来检查列表是否存在重复值。

def has_duplicates(lst):
  return len(lst) != len(set(lst))
x = [1,2,3,4,5,5]
y = [1,2,3,4,5]
has_duplicates(x) # True
has_duplicates(y) # False

19. 合并字库

以下方法可将两个字库合并。

def merge_two_dicts(a, b):
  c = a.copy()  # make a copy of a 
  c.update(b)  # modify keys and values of a with the ones from b
  return c
a = { 'x': 1, 'y': 2}
b = { 'y': 3, 'z': 4}
print(merge_two_dicts(a, b)) # {'y': 3, 'x': 1, 'z': 4}

在Python3.5及升级版中,也可按下列方式执行步骤代码:

def merge_dictionaries(a, b)
  return {**a, **b}
a = { 'x': 1, 'y': 2}
b = { 'y': 3, 'z': 4}
print(merge_dictionaries(a, b)) # {'y': 3, 'x': 1, 'z': 4}

20. 将两个列表转换为字库

以下方法可将两个列表转换为字库。

def to_dictionary(keys, values):
  return dict(zip(keys, values))
keys = ["a", "b", "c"]  
values = [2, 3, 4]
print(to_dictionary(keys, values)) # {'a': 2, 'c': 4, 'b': 3}

21. 列举

以下代码段可以采用列举的方式来获取列表的值和索引。

list = ["a", "b", "c", "d"]
for index, element in enumerate(list): 
  print("Value", element, "Index ", index, )
# ('Value', 'a', 'Index ', 0)
# ('Value', 'b', 'Index ', 1)
#('Value', 'c', 'Index ', 2)
# ('Value', 'd', 'Index ', 3)

22. 时间成本

以下代码可计算执行特定代码所需的时间。

import time
start_time = time.time()
a = 1
b = 2
c = a + b
print(c) #3
end_time = time.time()
total_time = end_time - start_time
print("Time: ", total_time)
# ('Time: ', 1.1205673217773438e-05)

23. Try else语句

可将else句作为try/except语句的一部分,如果没有异常情况,则执行else语句。

try:
  2*3
except TypeError:
  print("An exception was raised")
else:
  print("Thank God, no exceptions were raised.")
#Thank God, no exceptions were raised.

24. 出现频率最高的元素

此方法将输出列表中出镜率最高的元素。

def most_frequent(list):
  return max(set(list), key = list.count)
list = [1,2,1,2,3,2,1,4,2]
most_frequent(list)

25. 回文(正反读有一样的字符串)

以下代码检查给定字符串是否为回文。首先将字符串转换为小写,然后从中删除非字母字符,最后将新字符串版本与原版本进行比对。

def palindrome(string):
  from re import sub
  s = sub('[\W_]', '', string.lower())
  return s == s[::-1]
palindrome('taco cat') # True

26. 不用if-else语句的计算器

以下代码片段展示了如何在不用if-else条件语句的情况下,编写简易计算器。

import operator
action = {
  "+": operator.add,
  "-": operator.sub,
  "/": operator.truediv,
  "*": operator.mul,
  "**": pow
}
print(action['-'](50, 25)) # 25

27. 随机排序

该算法采用Fisher-Yates algorithm对新列表中的元素进行随机排序。

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] , foo = [1,2,3]

28. 展开列表

此方法将类似javascript中[].concat(…arr)这样的列表展开。

def spread(arg):
   ret = []
  for i in arg:
    if isinstance(i, list):
      ret.extend(i)
    else:
      ret.append(i)
  return ret
spread([1,2,3,[4,5,6],[7],8,9]) # [1,2,3,4,5,6,7,8,9]

29. 交换变量

此方法为能在不使用额外变量的情况下快速交换两种变量。

def swap(a, b):
 return b, a
a, b = -1, 14
swap(a, b) # (14, -1)

30. 获取丢失部分的默认值

以下代码可在所需对象不在字库范围内的情况下获取默认值。

d = {'a': 1, 'b': 2}
print(d.get('c', 3)) # 3

本文只简单介绍了一些能在日常工作中帮到我们的方法。但内容都主要立足于GitHub 存储库:https://github.com/30-seconds/30_seconds_of_knowledge,该存储库还包含了有关Python及其他语言和技术行之有效的代码。

Python 相关文章推荐
Python实现远程调用MetaSploit的方法
Aug 22 Python
Python实现八大排序算法
Aug 13 Python
Python有序字典简单实现方法示例
Sep 28 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
Jan 31 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
Jun 19 Python
使用django实现一个代码发布系统
Jul 18 Python
Python中list的交、并、差集获取方法示例
Aug 01 Python
python中sort和sorted排序的实例方法
Aug 26 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
Sep 23 Python
cookies应对python反爬虫知识点详解
Nov 25 Python
用python批量下载apk
Dec 29 Python
Python面向对象之内置函数相关知识总结
Jun 24 Python
PYTHON绘制雷达图代码实例
Oct 15 #Python
利用Python产生加密表和解密表的实现方法
Oct 15 #Python
python多线程并发及测试框架案例
Oct 15 #Python
浅析PEP570新语法: 只接受位置参数
Oct 15 #Python
浅析PEP572: 海象运算符
Oct 15 #Python
Python 导入文件过程图解
Oct 15 #Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 #Python
You might like
discuz的php防止sql注入函数
2011/01/17 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
laravel安装和配置教程
2014/10/29 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
jquery等待效果示例
2014/05/01 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
js实现文字闪烁特效的方法
2015/12/17 Javascript
Javascript之深入浅出prototype
2017/02/06 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
2018/01/21 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
python使用PIL缩放网络图片并保存的方法
2015/04/24 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
Request的中断和ErrorHandler实例解析
2018/02/12 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
Django使用unittest模块进行单元测试过程解析
2019/08/02 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
关于python 跨域处理方式详解
2020/03/28 Python
世界首屈一指的钓鱼用品商店:TackleDirect
2016/07/26 全球购物
意大利体育用品网上商城:Nencini Sport
2016/08/18 全球购物
中东奢侈品市场:Coveti
2019/05/12 全球购物
eBay奥地利站:eBay.at
2019/07/24 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
优秀公益广告词大全
2014/03/19 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书