20个python编码小技巧-推导式、翻转、排序、迭代器等等

news2024/11/24 20:29:12

 

本文分享一些 Python 技巧,它可以让你的代码更简洁、更高效。

1.列表推导式

li = [x for x in range(10) if x % 2 == 0]
print(li) # [0, 2, 4, 6, 8]

li = [i*2 if i%2==0 else i*3 for i in range(10)]
print(li) # [0, 3, 4, 9, 8, 15, 12, 21, 16, 27]

# 应用:将字典{'x': 'A', 'y': 'B', 'z': 'C'}通过推导式转换为:['x=A', 'y=B', 'z=C']
dic = {'x': 'A', 'y': 'B', 'z': 'C'}
res4 = ["{}={}".format(k, v) for k, v in dic.items()]
print(res4)

2.字典推导式

# 将{'py': "python09", 'java': "java09"}转换为: {'python09': "py", 'java09': "java"}
dic = {'py': "python09", 'java': "java09"}
res = {v: k for k, v in dic.items()}
print(res)  # {'python09': 'py', 'java09': 'java'}

3.集合推导式

set = {x for x in 'abcdefg'}
print(set)  # {'f', 'g', 'd', 'b', 'c', 'e', 'a'}

4.生成器(注意没有元组推导式)

g = (x for x in range(100))
print(g)   # <generator object <genexpr> at 0x00000185B0D94E40>

5.翻转

a = 'abcdefg'

方法1:
"".join(reversed(list(a)))
或者 b= list(a)
b.reverse()
"".join(b)

方法2:
s=''
for i in a:
s = i+s

方法3:
a[::-1]

方法4:
def func(x):
if len(x)<=1:
return x
return func(x[1:]) + x[0]

方法5:
a = [1, 2, 4, 6, 8]
lenth = len(a)
for i in range(len(a)//2):
   a[i], a[lenth-1-i] = a[lenth-1-i], a[i]

6.排序

一、内建函数sorted,返回None
sorted(data)
二、sort()方法
data.sort(key=lambda element: (-element['price'], element['id'])    # 先按price倒序排,再按id排

7.列表转字典

mydict = ["John", "Peter", "Mathew", "Tom"]
mydict = dict(enumerate(mydict))
print(mydict) # {0: 'John', 1: 'Peter', 2: 'Mathew', 3: 'Tom'}

8.合并字典

# 在一行中合并字典
d1 = { 'A': 1, 'B': 2 } 
d2 = { 'C': 3, 'D': 4 }
#方法 1 
d1.update(d2) 
print(d1) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
#方法 2 
d3 = {**d1, **d2} 
print(d3) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}

9.一行函数

fun = lambda x : x % 2 == 0 
print(fun(2)) # True 
print(fun(3)) # False

10.可迭代对象(Iterable)

分类:

1.str,list,tuple,range

2.open的文件对象

3.实现了序列语义的对象,__getitem__()

4.实现了迭代协议的对象,__iter__()

简言之,就是可以for循环的对象

class MyList:
    def __init__(self, seq=()):
        self.items = seq

    def __getitem__(self, index):
        return self.items[index]

    def __iter__(self):
        for item in self.items:
            yield item

s = MyList((1, 2, 3))
for i in s:
    print(i)

11.迭代器

实现了迭代器协议(__iter__(),__next__())的对象

class MyList:
    def __init__(self, seq=()):
        self.items = seq
        self.num=0

    def __getitem__(self, index):
        return self.items[index]

    def __iter__(self):
        return self
    
    def __next__(self):
        if self.num<len(self.items):
            ret = self.items[self.num]
            self.num +=1
            return ret
        else:
            raise StopIteration

s = MyList((1, 2, 3))
print(next(s))
print(next(s))
print(next(s))

12.生成器

一个特殊的迭代器,实际中常用

分类:
1.生成器表达式 
2.含有yield的函数(yield可以在函数内任意位置,执行到它即返回一个值,并暂停程序,下次取值从这继续)
优点:节省内存(因为存的是地址,使用的时候才真正计算出值)

13.使用集合从两个列表中获得差异

list1 = [1,2,3,4,5] 
list2 = [3,4,5] 
print(list(set(list1) — set(list2)))   # [1,2] {1,2}
print(set(lista1).difference(set(lista2))) # [1,2] {1,2}

14.counter计数

from collections import Counter

nums = [1, 2, 3, 4, 5, 4, 5, 7, 4, 5, 4, 2]
count = Counter(nums)   # Counter({4: 4, 5: 3, 2: 2, 1: 1, 3: 1, 7: 1})
print(count)

res = count.most_common(2)  # 返回出现次数最多的两个数及其出现的次数
print(res)  # [(4, 4), (5, 3)]

15.循环嵌套的简写

list1 = range(1, 3)
list2 = range(4, 6)
list3 = range(7, 9)
for item1 in list1:
    for item2 in list2:
        for item3 in list3:
            print(item1 + item2 + item3)

# 简写方式
from itertools import product
for item1,item2,item3 in product(list1, list2, list3):
    print(item1+item2+item3)

16.赋值

# 值互换
a = 1
b = 2
a, b = b, a
print(a, b)  # 2,1

x, y, z = [1, 2, 3]
print(x, y, z)  # 1,2,3

x, y, z = 1, 2, 3
print(x, y, z)  # 1,2,3

17.比较运算符的连接

n = 10 
result = 1 < n < 20 
print(result)   # True

result = 1 > n <= 9 
print(result)   # False

18.条件语句的各种写法

m=1
print(any([m==1 ,m==3 ,m==5 ,m==7]))
print(m==1 or m==3 or m==5 or m==7)
print(m in [1,3,5,7])

19.上下文管理器

上下文管理器:举例:使用with打开文件后不用额外手动关闭文件

正常情况下,连接mysql使用完毕后需要手动close断连,以下代码中MyMysql实现了上下文管理器协议(__enter__(),__exit__()),使用with打开后不要手动close了。

import pymysql


class MyMysql:
    def __init__(self):
        self.cursor = None

    def __enter__(self):
        conn = pymysql.connect(host='46.90.70.100',  # host属性
                               port=3306,  # 端口号
                               user='root',  # 用户名
                               password='xxxxx',  # 此处填登录数据库的密码
                               db='gao',  # 数据库名
                               charset="utf8")
        self.cursor = conn.cursor()
        return self.cursor

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.cursor.close()


with MyMysql() as m:
    m.execute('select * from Persons')
    res = m.fetchall()
    print(res)
m.execute('select * from Persons')

20.检查两个字符串是不是由相同字母不同顺序组成

from collections import Counter
print(Counter(s1) == Counter(s2))

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

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

相关文章

flutter 并不完美的登录完美验证功能

flutter 并不完美的登录完美验证功能前言一、文本输入功能二、验证提示功能三、业务部分总结前言 在一个APP 中&#xff0c;登录页面做为门户&#xff0c;很多时候&#xff0c;我们都需要写一个完善的登录验证页面&#xff0c;本篇文章将记录如何去封装一个并不算完美的登录验…

BurpSuite抓取App包,详细教程

BurpSuite抓取App包&#xff0c;详细教程1.工具准备2.手动代理模拟器3.修改BurpSuite代理4.测试最近有很多粉丝小伙伴反映自己不会使用BurpSuite抓取手机App的流量包&#xff0c;其实很简单&#xff0c;和Web基本是如出一辙的 1.工具准备 夜神模拟器 BurpSuite请自行准备环境…

CISP-DSG证书有效期多久?是否需要续证?

CISP-DSG证书有效期为3年。有效期结束后需向中国信息安全测评中心授权机构进行续证维持&#xff0c;并缴纳证书维持费。如超期半年以上需多交一年年金&#xff0c;以此累计。建议大家在证书到期前三个月提交材料进行续证。那么CISP-DSG续证流程是什么呢&#xff1f;以下是小编整…

Android 教程

Android 是一个开源的&#xff0c;基于 Linux 的移动设备操作系统&#xff0c;主要使用于移动设备&#xff0c;如智能手机和平板电脑。Android 是由谷歌及其他公司带领的开放手机联盟开发的。 本教程将教会你基本的 Android 编程&#xff0c;以及学习一些 Android 应用程序开发…

【Python】sklearn之AP聚类AffinityPropagation

文章目录基本原理sklearn中的实现基本原理 AffinityPropagation按照字面意思就是亲和力传播&#xff0c;可见这个算法的关键就是亲和力与传播。 说到传播&#xff0c;无外乎两件事&#xff0c;第一件事&#xff0c;传的是什么&#xff0c;暂且先不用管&#xff0c;因为名字里…

WORD: 如何在一个word里文档里创建多个目录?

如何在一个word里文档里创建多个目录&#xff1f; 1 目录的创建 引用/目标/自动目录 &#xff08;同时文章本身需要设置层级标题正文等&#xff09; 一般不选手动目录&#xff0c;没试过狠麻烦吧2 如何设置2个目录呢&#xff1f; 直接在新的地方插入一个目录&#xff0c;选择…

OpenGL教程一,窗体和图形的渲染(包含OpenGL、GLFW、GLAD)

运行环境&#xff1a;Linux 、C 本教程仅个人学习总结第一个hello world&#xff0c;渲染一个窗体渲染一个矩形本教程仅个人学习总结 一切参考资源&#xff1a;都在官网。 1、安装glfw 首先下载glfw : 点击这里 1、下载 2、解压 3、mkdir build && cd build 4、cmake …

学习poi导出excel之XSSFWorkbook

1 基本介绍 POI提供了HSSF、XSSF以及SXSSF三种方式操作Excel。 HSSF&#xff1a;Excel97-2003版本&#xff0c;扩展名为.xls。一个sheet最大行数65536&#xff0c;最大列数256。 XSSF&#xff1a;Excel2007版本开始&#xff0c;扩展名为.xlsx。一个sheet最大行数1048576&…

电脑桌面主题(28)和动态视频壁纸(31)合集(收藏)

最近就是突然被身边朋友的电脑壁纸给吸引到了&#xff0c;在这之前的我一直遵循着 “大道至简” 的原则&#xff0c;一张Windows原生态静态壁纸走天下&#xff0c;但是作为一个00后我还是 “破戒” 了&#xff0c;其实我认为特别像程序员之类的有一张自己满意的桌面壁纸是非常重…

Mybatis-Plus分页与条件查询

目录 标准分页功能制作 条件查询 条件查询-null值处理 标准分页功能制作 1&#xff1a;设置分页拦截器作为Spring管理的bean Configuration public class MpConfig {Beanpublic MybatisPlusInterceptor mpInterceptor(){//1.定义MP拦截器MybatisPlusInterceptor mpIntercept…

Python中使用的流行数据科学库

Python中使用的流行数据科学库 数据科学是用于采购、组织、打包和以可理解的格式呈现数据的程序和方法。在不同的领域可能有不同种类的数据&#xff0c;这些数据可能是结构化的&#xff0c;也可能是非结构化的。 为什么Python在人们开始他们的编码之旅时如此受欢迎&#xff1…

删除数组中符合指定条件的元素

不符合指定条件&#xff0c;可能是指定数组array中的某一项不符合某一值的要求&#xff1b;或者是拿另一个数组arr对比&#xff0c;要求array只留下复合arr中的值或者删除掉复合arr中的值。 1.不符合某一值的要求 <!DOCTYPE html> <html lang"en"> <…

一篇文章轻松掌握java图实现

图的基本概念&#xff1a;这里就不予介绍了&#xff0c;这里主要是讲图的代码实现 荔枝目录&#xff1a;1.图的存储结构1.1邻接矩阵1.2邻接表2.图的遍历2.1广度优先2.2深度优先3.最小生成树3.1Kruskal算法&#xff08;全局&#xff09;3.2Prim算法&#xff08;局部&#xff09;…

[UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控

[UE][UE5]在UE中画一个线框球&#xff0c;网格连接画球&#xff0c;高阶画球并操控1.材质法2.绘制调试球体3.网格连接4.高阶画球并操控1.材质法 缺点&#xff1a;是实体的&#xff0c;只能欺骗视觉&#xff0c;实际还是一个实体体积球&#xff0c;往里放东西显示不出来放进去的…

Python中ArcPy基于矢量要素批量将栅格影像切割为多个小部分

本文介绍基于Python中ArcPy模块&#xff0c;基于具有多个面要素的要素类&#xff0c;批量分割大量栅格图像的方法。 首先明确一下我们的需求。现在需要基于一个面要素类&#xff0c;对一个栅格遥感影像加以分割&#xff1b;如下图所示。这个面要素类中有3个部分&#xff0c;我们…

MMdetection框架速成系列 第02部分:整体算法流程+模型搭建流程+detection训练与测试核心组件+训练部分与测试部分的核心算法

MMdetection框架速成系列 第02部分1 MMDetection是什么1.1 模型分类2. 整体算法流程3 detection训练核心组件3.1 Backbone3.2 Neck3.3 Head3.4 Enhance3.5 BBox Assigner3.9 BBox Sampler3.10 BBox Encoder3.11 Loss3.12 Training tricks4 detection测试核心组件4.1 BBox Decod…

python源码打包exe、exe反编译

一、python3打包为exe文件 这里有个hello.py文件 step1&#xff1a;安装pyinstaller包 pip install pyinstaller step2&#xff1a;在cmd中进入hello.py文件所在路径。可以直接在hello.py文件路径下直接进入cmd step3&#xff1a;打包生成exe文件&#xff0c;使用如下命令&…

Linux网络协议之IP协议(网络层)

Linux网络协议之IP协议(网络层) 文章目录Linux网络协议之IP协议(网络层)1.IP协议基本概念2.IPV4协议格式3.分片与组装4.IP网段划分4.1 IP地址组成4.2 IP地址分类4.3 特殊的IP地址4.4 IP地址的数量限制4.5 私网IP地址与公网IP地址5.对路由的了解1.IP协议基本概念 IP协议全称为“…

第四章 vi和vim 编辑器-[实操篇]

一&#xff1a;vi 和 vim 的基本介绍 所有的 Linux 系统都会内建vi文本编辑器。 Vim 具有程序编辑的能力&#xff0c;可以看做是 Vi的增强版本&#xff0c;可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设计。代码补完&#xff0c;编译及错误跳转等方便编程的功…

Linux安装【入门学习适用】

Linux安装安装1、安装VMware激活码&#xff1a;ZF3R0-FHED2-M80TY-8QYGC-NPKYF2、安装CentOS3、FinalShell安装4、FinalShell的使用安装 1、安装VMware VMware-workstation-full-16.2.4无脑下一步即可 激活码&#xff1a;ZF3R0-FHED2-M80TY-8QYGC-NPKYF 2、安装CentOS 1、…