第十一期: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,一经查实,立即删除!

相关文章

使用scikit中的聚类

这是一次数据实验。基于七月算法邹博讲义和scikit-lean官网。 聚类&#xff1a;就是对大量未知标注的数据集&#xff0c;按数据的内在相似性将数据划分为多个类别&#xff0c;使得类别内的数据相似性较大而类别间的相似性较小。 1 k-means算法  参数&#xff1a;聚类的数目…

概率中比较重要的知识

-什么是协方差&#xff1f; 就是衡量两个随机变量&#xff08;X,YX,YX,Y&#xff09;之间相关性的量&#xff0c;取多个两个量的样本&#xff0c;通过判断他们大小变化关系&#xff0c;判断这两个量是正相关还是负相关或无相关。 记做&#xff1a;Cov(X,Y)E[(X−E(X))(Y−E(Y)…

MySQL学习(三)

-- 计算字段 -- 拼接字段 SELECT CONCAT(vend_name, (,vend_country,)) FROM Vendors ORDER BY vend_name;SELECT CONCAT(vend_name,vend_country) FROM Vendors ORDER BY vend_name;-- CONCAT(str1,str2,...) 拼接查询的值 SELECT CONCAT(vend_name,vend_country) FROM Vendo…

[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二元连续型随机变量的定义、联合概率密度函数、边际密度函数、条件密度函数 二元随机变…

深度学习:什么是backbone,benchmark,baseline

backbone&#xff1a;骨干网络&#xff0c;比如alexnet&#xff0c;ZFnet&#xff0c;VGG&#xff0c;googlenet... benchmark&#xff1a;性能指标&#xff0c;比如accuracy&#xff0c;内存消耗&#xff0c;模型复杂度&#xff0c;或者在性能上很有代表性的算法框架。 base…

6.mysql 锁机制

概述 定义&#xff1a; 锁是计算机协调多个进程或者线程并发访问某一资源的机制 在数据库中&#xff0c;除传统的计算资源&#xff08;如CPU,RAM,IO等&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发 访问的一致性、有效性是所有数据库…

第三十九期:原生图数据库的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挂…

476 Number Complement

问题&#xff1a;给定一个整数&#xff0c;返回它的补数。补数的是将原数据的二进制表示反转。例如 5 的二进制位是 101&#xff0c;反转之后是&#xff1a;010&#xff0c;也就是整数2。所以输入5&#xff0c;返回2.。输入1&#xff0c;返回0。  思路&#xff1a;取反操作是…

设单链表中存放n个字符,试设计一个算法,使用栈推断该字符串是否中心对称...

版权声明&#xff1a;本文为博主原创文章。未经博主同意不得转载。vasttian https://blog.csdn.net/u012860063/article/details/28281631 转载请注明出处&#xff1a;http://blog.csdn.net/u012860063 问题&#xff1a;设单链表中存放n个字符&#xff0c;试设计一个算法&#…

6项目启动

项目启动概述

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

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

Leetcode 1559二维网格图中探测环 技巧DFS|剪枝

二维网格图中探测环 给你一个二维字符网格数组 grid &#xff0c;大小为 m x n &#xff0c;你需要检查 grid 中是否存在 相同值 形成的环。 一个环是一条开始和结束于同一个格子的长度 大于等于 4 的路径。对于一个给定的格子&#xff0c;你可以移动到它上、下、左、右四个方…

LVM--逻辑卷管理

一、分区fdisk /dev/sdb #以下将硬盘/dev/sdb划分为两个主分区&#xff08;不建扩展分区&#xff09;:/dev/sdb1、/dev/sdb2&#xff0c;类型为Linux、Linux LVM [rootvm-centos7 ~]# fdisk /dev/sdbCommand (m for help): n #按"n"键新建一个分区 Partition ty…

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;树 图 连续的内存空间和相…