第十一期:30秒内便能学会的30个实用Python代码片段

许多人在数据科学、机器学习、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及其他语言和技术行之有效的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Leetcode][第114题][JAVA][二叉树展开为链表][递归][迭代]

【问题描述】[中等] 【解答思路】 1. 前序遍历 将二叉树展开为单链表之后&#xff0c;单链表中的节点顺序即为二叉树的前序遍历访问各节点的顺序。因此&#xff0c;可以对二叉树进行前序遍历&#xff0c;获得各节点被访问到的顺序。 由于将二叉树展开为链表之后会破坏二叉树的…

第三十八期:美国数据隐私保护法案来临,明年1月生效,现仅2%企业合规

2018 年美国加州通过消费者隐私法案&#xff08;CCPA&#xff09;&#xff0c;缓冲一年多后&#xff0c;将于 2020 年 1 月生效。届时&#xff0c;类似于欧盟的法案&#xff0c;CCPA 将对所有和美国加州居民有业务的数据商业行为进行监管。 依然在应付欧盟数据保护法案(GDPR)的…

二元随机变量

本章记录  1二元随机变量的定义  2二元离散型随机变量的定义、联合概率分布律、边际分布律、条件分布律  3二元离散型随机变量联合概率分布律函数、边际分布函数、条件分布函数  4二元连续型随机变量的定义、联合概率密度函数、边际密度函数、条件密度函数 二元随机变…

第三十九期:原生图数据库的15条规则

不妨看一下原生图形数据库的15条规则。就像复杂的系统网格或空中交通管制图&#xff0c;图形数据库用节点和连接组成的网络(名为标记属性图)来表示。节点显示为圆形或正方形&#xff0c;代表人员、产品、公司或订单等实体。 就像复杂的系统网格或空中交通管制图&#xff0c;图形…

[周赛第200场][Leetcode][第5477题][第5478题][JAVA][双指针][贪心]

【问题描述】[中等]5477. 排布二进制网格的最少交换次数 【解答思路】 贪心 限制条件 第一行要求末尾的0要尽量多 计算每行最后有几个0遍历交互 符合条件 第i行的末尾0的数量为n-i-1 统计交换次数第i行的末尾0的数量小于n-i-1&#xff0c;不符合条件 时间复杂度&#xff1a…

ubuntu异常关机,断电重启后进入紧急模式,挂载磁盘SSD失败了怎么办?(Failed mount on XXX)

解决方案&#xff1a; 进入/etc/fstab中保留你所有的除了必要的系统分区挂载点&#xff0c;这里保存了所有开机引导的时候自动挂载到linux文件系统里的设备还有分区信息&#xff0c;当系统启动的时候&#xff0c;系统会在这里读取信息并挂载到相应目录下。所有的磁盘硬盘SSD挂…

6项目启动

项目启动概述

[Leetcode][第415题][JAVA][字符串相加][双指针]

【问题描述】[简单] 【解答思路】 1. 双指针 从两个字符串最后开始处理 对齐字符串添加当前位 int c abcnt; cnt为进位超过长度的补“0” 要注意最后有可能需要处理溢出位 时间复杂度&#xff1a;O(max(M,N)) 空间复杂度&#xff1a;O(1) public String addStrings(String nu…

401 binary watch

文章题目来源于leetcode&#xff0c;解法学习了讨论去的解法。  问题&#xff1a;有一种二进制LED表。上面的4个LED灯表示小时&#xff0c;下面6个LED灯表示分钟。给定一个int值&#xff0c;写出可能表示的时间。例如输入1&#xff0c; Input: n 1 Return: [“1:00”, “2…

7立项申请

项目诞生的驱动因素 系统服务请求书 识别需求提出项目建议书 项目建议书内容 项目的可行性研究 如何进行项目的可行性研究 市场可行性研究 市场可行性分析注意事项 捕捉用户需求是一件困难的事 三个苹果改变世界 经济可行性 收益与成本 投入产出分析 投资分析期 纯收入 技术可行…

【数据结构与算法】数组与链表

数组的定义和特性 数组&#xff08;Array&#xff09;是一种线性表数据结构。它用一组连续的内存空间&#xff0c;来存储一组具有相同类型的数据。 线性表&#xff08;Linear List&#xff09;&#xff1a;数组、链表、队列、栈 非线性表&#xff1a;树 图 连续的内存空间和相…

8构建项目组

组建项目组 组建项目组的任务 项目组架构 项目赞助人职责 项目经理的标签 项目经理的责任 项目成员的职责 案例分析 西天取经的只能架构 西天取经项目组 一个良好团队的七个要素

MySQL数据库面试题

目录数据库基础知识为什么要使用数据库什么是SQL&#xff1f;什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式&#xff1f;分别有什么区别&#xff1f;数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引…

log双线性模型log-bilinear model简单概括

LBLM(log-bilinear model)是自然语言处理中的比较简单的模型。LBLM根据上下文的词向量来预测下一个词向量wnw_nwn​&#xff0c;通过对上下文词向量的一个线性组合来表示&#xff1a; rwr_wrw​是一个实数值词向量对于词www对于下一个词的分布计算根据wnw_nwn​预测表示和所有…

9制定项目章程

项目干系人概述 项目主要干系人 项目章程 项目章程的功能 项目章程

【数据结构与算法】栈与队列

栈 一、什么是栈&#xff1f; 1.后进者先出&#xff0c;先进者后出&#xff0c;这就是典型的“栈”结构。 2.从栈的操作特性来看&#xff0c;是一种“操作受限”的线性表&#xff0c;只允许在端插入和删除数据。 二、为什么需要栈&#xff1f; 1.栈是一种操作受限的数据结构…

线性代数的本质笔记-更新ing

1. 序言 线性代数不光要会计算&#xff0c;还要理解掌握其几何直观。 2. 向量究竟是什么&#xff1f; 物理学&#xff1a;向量是空间中的箭头&#xff0c;具有长度和方向两个属性。计算机&#xff1a;向量是一个有序数表。比如房屋的参数信息可以根据相关属性按准许列成一个…

10项目开工会

立项启动准备 启动会的任务 如何进行项目启动

[Leetcode][第337题][JAVA][打家劫舍3][递归][动态规划]

【问题描述】[中等] 【解答思路】 1. 动态规划 第 1 步&#xff1a;状态定义 dp[node][j] &#xff1a;这里 node 表示一个结点&#xff0c;以 node 为根结点的树&#xff0c;并且规定了 node 是否偷取能够获得的最大价值。 j 0 表示 node 结点不偷取&#xff1b; j 1 表示…