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中请使用isinstance()判断变量类型
Aug 25 Python
用Python编写简单的微博爬虫
Mar 04 Python
Python中使用装饰器来优化尾递归的示例
Jun 18 Python
基础的十进制按位运算总结与在Python中的计算示例
Jun 28 Python
Python设计模式之工厂模式简单示例
Jan 09 Python
django自带的server 让外网主机访问方法
May 14 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
Jun 14 Python
对python当中不在本路径的py文件的引用详解
Dec 15 Python
Python3实现汉语转换为汉语拼音
Jul 08 Python
python区分不同数据类型的方法
Oct 14 Python
Python之Numpy的超实用基础详细教程
Oct 23 Python
使用 Python 读取电子表格中的数据实例详解
Apr 17 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
FCKeditor的安装(PHP)
2007/01/13 PHP
PHP时间戳使用实例代码
2008/06/07 PHP
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
PHP中的类型约束介绍
2015/05/11 PHP
如何使用纯PHP实现定时器任务(Timer)
2015/07/31 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
jQuery EasyUI API 中文文档 搜索框
2011/09/29 Javascript
基于jquery的滚动鼠标放大缩小图片效果
2011/10/27 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
javascript弹出窗口中增加确定取消按钮
2016/06/24 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
jquery实现上传文件进度条
2020/03/26 jQuery
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
django框架如何集成celery进行开发
2017/05/24 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
建筑班组长岗位职责
2014/01/02 职场文书
2014年教研室工作总结
2014/12/06 职场文书
学校节水倡议书
2015/04/29 职场文书
不同意离婚答辩状
2015/05/22 职场文书
预备党员转正意见
2015/06/01 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书