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 相关文章推荐
简单的Python2.7编程初学经验总结
Apr 01 Python
python基于隐马尔可夫模型实现中文拼音输入
Apr 01 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
python web自制框架之接受url传递过来的参数实例
Dec 17 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
Sep 20 Python
TensorFlow实现保存训练模型为pd文件并恢复
Feb 06 Python
python圣诞树编写实例详解
Feb 13 Python
python安装dlib库报错问题及解决方法
Mar 16 Python
Python识别验证码的实现示例
Sep 30 Python
python文件名批量重命名脚本实例代码
Apr 22 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
Jun 28 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
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
PHP循环结构实例讲解
2014/02/10 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
php调用自己java程序的方法详解
2016/05/13 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
2015/12/14 Javascript
Javascript打印局部页面实例
2016/06/21 Javascript
原生JS轮播图插件
2017/02/09 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
jquery加载单文件vue组件的方法
2017/06/20 jQuery
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
Python Tkinter简单布局实例教程
2014/09/03 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
python使用多进程的实例详解
2018/09/19 Python
Python二维码生成识别实例详解
2019/07/16 Python
python retrying模块的使用方法详解
2019/09/25 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
服装电子商务创业计划书
2014/01/30 职场文书
四年级语文教学反思
2014/02/05 职场文书
排查整治工作方案
2014/06/09 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
总经理助理岗位职责
2015/01/31 职场文书
个人业务学习心得体会
2016/01/25 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
浅谈Redis中的RDB快照
2021/06/29 Redis
win10如何快速切换窗口 win10切换窗口快捷键分享
2022/07/23 数码科技