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使用cookielib库示例分享
Mar 03 Python
python实现简单神经网络算法
Mar 10 Python
python实现zabbix发送短信脚本
Sep 17 Python
Python SMTP发送邮件遇到的一些问题及解决办法
Oct 24 Python
PyQt4编程之让状态栏显示信息的方法
Jun 18 Python
Python一键安装全部依赖包的方法
Aug 12 Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
Jun 17 Python
Python实现扫码工具的示例代码
Oct 09 Python
python将下载到本地m3u8视频合成MP4的代码详解
Nov 24 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 04 Python
python多线程和多进程关系详解
Dec 14 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
加速XP搜索功能堪比vista
2007/03/22 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
PHP弹出对话框技巧详细解读
2015/09/26 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
JS小功能(checkbox实现全选和全取消)实例代码
2013/11/28 Javascript
javascript中对变量类型的判断方法
2015/08/09 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
js html实现计算器功能
2018/11/13 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
Python实现方便使用的级联进度信息实例
2015/05/05 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
HTML5 canvas基本绘图之图形变换
2016/06/27 HTML / CSS
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
应届优秀本科大学毕业生自我鉴定
2014/01/21 职场文书
大学生求职工作的自我评价
2014/02/13 职场文书
党员个人党性分析材料
2014/12/18 职场文书
逃课检讨书
2015/01/26 职场文书
通知格式
2015/04/27 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python