Python 进阶 - 日常工作中使用过的简单Trick

news2024/11/27 19:46:23

        引言:无论你是一名初学者还是有一定经验的开发者,这些技巧都能帮助你更好地利用Python来解决问题、提高效率和写出更干净、可维护的代码。无论你是数据科学家、Web开发者、自动化脚本编写者还是其他领域的从业者,这些技巧都能对你有所帮助。

目录

处理用户的多个输入

处理多个条件语句

交换变量

判断字符串是否为回文串

Pretty print

两个list生成一个字典

将两个字典进行合并

删除list中的重复元素

找到list中重复最多的元素

list 生成式

在循环中使用下标

list中多个元素拼接

反转列表


处理用户的多个输入

有时我们需要从用户那里获得多个输入,以便使用循环或任何迭代


# bad 
n1 = input("请输入 : ")
n2 = input("请输入 : ")
n2 = input("请输入 : ")
print(n1, n2, n3)

        如果用户输入内容的同时加入一个分隔符,例如逗号或分号,你可以传递分隔符作为split方法的参数。例如,如果用户使用逗号分隔单词,你可以这样处理:


# good 

user_input = input("请输入多个单词,用空格分隔:")
words = user_input.split()

print("你输入的单词是:")
for word in words:
    print(word)

处理多个条件语句

age= 18
price = 50

# bad 
if age== 18 and price < 100:
    print("Yes")

        如果我们在代码中需要检查多个条件语句,此时我们可以使用 all() 或any() 函数来实现我们的目标。一般来说, 当我们有多个 and 条件时使用 all(),当我们有多个 or 条件时使用 any()。

# good
conditions = [
    age == 18,
    price < 100,
]

if all(conditions):
    print("Yes")

如果是满足条件之一的话,我们也可以用any()

# good
conditions = [
    age == 18,
    price < 100,
]

if any(conditions):
    print("Yes")

交换变量

这个就比较老生常谈了,python特有的机制使得在转换变量时不用中间变量

# bad 

temp = v1
v1 = v2
v2 = temp

而是可以直接交换:

# good

v1, v2 = v2, v1

判断字符串是否为回文串

做这个判断的方式之一是比较它与它的反转是否相同。如果它们相同,那么该字符串就是回文串

而将字符串进行反转最简单的实现方式为 [::-1] ,比如:


print("aaahhhaaabbb"[::-1])

然后只需在原本的字符串中尝试寻找是否有翻转后的字符串,因为长度相等,如果找到则必然是其本身。

v1 = "asdfdsa" 
v2 = "master er"
print(v1.find(v1[::-1]) == 0) # True
print(v1.find(v2[::-1]) == 0) # False

tips:find()  用于查找子字符串在给定字符串中的第一次出现的位置。如果找到了子字符串,它返回子字符串的起始索引;如果未找到,它返回 -1。

Pretty print

处理 JSON 或 XML 数据时,Pretty print 可以将其格式化为易读的方式,也可以自动格式化代码,使其符合编程规范和风格指南,提高代码的可读性


from pprint import pprint

data = {
"name": "john deo",
"age": "22",
"address": {"contry": "canada", "state": "an state of canada :)", "address": "street st.34 north 12"},
"attr": {"verified": True, "emialaddress": True},
}


print(data)
pprint(data)

看看结果:

{'name': 'john deo', 'age': '22', 'address': {'contry': 'canada', 'state': 'an state of canada :)', 'address': 'street st.34 north 12'}, 'attr': {'verified': True, 'emialaddress': True}}

{'address': {'address': 'street st.34 north 12',
             'contry': 'canada',
             'state': 'an state of canada :)'},
 'age': '22',
 'attr': {'emialaddress': True, 'verified': True},
 'name': 'john deo'}

两个list生成一个字典

如果我们需要将两个列表中对应的元素组成字典,那么我们可以使用 zip 功能来做到这一点

keys = ['a', 'b', 'c']
vals = [1, 2, 3]
zipped = dict(zip(keys, vals))
print(zipped)

# {'a': 1, 'b': 2, 'c': 3}

将两个字典进行合并

可以使用{**dict_name, **dict_name2, … }将多个字典进行合并

d1 = {"v1": 22, "v2": 33}
d2 = {"v2": 44, "v3": 55}
d3 = {**d1, **d2}
print(d3)

# {'v1': 22, 'v2': 44, 'v3': 55}

删除list中的重复元素

我们不需要遍历整个list列表来检查重复元素,我们可以简单地使用 set() 来删除重复元素


lst = [1, 2, 3, 4, 3, 4, 4, 5, 6, 3, 1, 6, 7, 9, 4, 0]
print(lst)
unique_lst = list(set(lst))
print(unique_lst)

找到list中重复最多的元素

在Python中可以使用 max( ) 函数并传递 list.count 作为key,就可以找出列表list中重复次数最多的元素,代码如下:

lst = [1, 2, 3, 4, 3, 4, 4, 5, 6, 3, 1, 6, 7, 9, 4, 0]
most_repeated_item = max(lst, key=lst.count)
print(most_repeated_item)

list 生成式

list comprehensions 这个特性可以使我们编写非常简洁功能强大的代码,而且这些代码读起来几乎像自然语言一样通俗易懂。

numbers = [1, 2, 3, 4, 5, 6, 7]
evens = [x for x in numbers if x % 2 is 0]
odds = [y for y in numbers if y not in evens]
cities = ['beijing', 'shanghai', 'tianjin']

print(evens)

print(odds)

for city in cities:
    print("Welcome to "+city)


# 结果
[2, 4, 6]
[1, 3, 5, 7]
Welcome to beijing
Welcome to shanghai
Welcome to tianjin

在循环中使用下标

如果在一个循环里想要获得循环中元素的下标,一般来说,比较优雅的写法是使用enumerate,代码如下:


lst = ["blue", "yellow", "pink", "orange", "red"]
for idx, item in enumerate(lst):
     print(idx, item)



# 结果
0 blue
1 yellow
2 pink
3 orange
4 red

list中多个元素拼接

使用join() 函数来添加拼接符将list中所有元素拼接到一起


names = ["aaa", "bbb", "ccc", "ddd", "eee"]
print(", ".join(names))


# aaa, bbb, ccc, ddd, eee

反转列表

Python 中通常有两种反转列表的方法:切片或 reverse() 函数调用。这两种方法都可以反转列表,但需要注意的是内置函数 reverse() 会更改原始列表,而切片方法会创建一个新列表。

import numpy as np


mylist=list(np.arange(0, 200))

mylist[::-1]
# 15.6 usec per loop

mylist.reverse()
# 10.7 usec per loop

显然,内置函数 reverse() 比列表切片方法更快

希望这些技巧能够为大家提供一些新的思路或者坚持学习的动力

欢迎收藏、评论交流,转载标明出处。

-----------------------

2023.09.25

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

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

相关文章

Linux 日期、时区

1、date命令 通过date命令可以在命令行中查看系统的时间 date [-d] [格式化字符串] -d 按照给定的字符串显示日期&#xff0c;一般用于日期计算 格式化字符串&#xff1a;通过特定的字符串标记&#xff0c;来控制显示的日期格式 %Y 年 %y 年份后两位数字 (00..99) %m …

【百度地图】绘制扇形图层

思路&#xff1a;使用多边形图层PolygonLayer&#xff0c;借助函数将一个经纬度转换成扇形经纬度数组 扇形经纬度数组生成函数 /** 返回扇形经纬度数组 绘制多边形* lon 经度* lat 维度* radius 半径* azimuth 方向角* jiaodu&#xff08;扇形的夹角&#xff09;** **/ export…

java Spring Boot2.7写一个接口 提供图片预览 前端可以直接用接口地址当src为图片地址使用

我们特别是在做小程序开发时 很多图片会比较大 而小程序本身就对自身大小要求非常高 所以 图片放在服务器上提供访问链接是一种非常好的选择 我想很多前端会误认为 直接将图片放在服务器上就可以了 但其实没那么简单 因为服务器其实也可以理解为一个电脑 你就想 你自己本地都不…

python+requests+pytest+allure自动化框架

1.核心库 requests request请求 openpyxl excel文件操作 loggin 日志 smtplib 发送邮件 configparser unittest.mock mock服务 2.目录结构 base utils testDatas conf testCases testReport logs 其他 2.1base base_path.py 存放绝对路径,dos命令或Jenkins执行…

idea Springboot闲置物品交易平台VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 闲置物品交易平台是一套完善的完整二手交易信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代…

Wespeaker框架训练(2)

2. 模型训练 2.1 run.sh stage 3 数据集处理完毕后开始训练&#xff0c;主要是调用wespeaker/bin/train.py 函数 echo ”Start training ...” 打印提示信息&#xff0c;表示开始训练num_gpus$(echo $gpus | awk -F ’,’ ’print NF’) 通过gpus 变量获取要使用的GPU 数量t…

《C++ primer》练习6.36-6.38:书写返回数组引用的函数声明

最近看C primer&#xff0c;看到《C primer》6.3.3练习&#xff0c;要求书写返回数组引用的函数声明&#xff0c;觉得有必要实践记录一下。 这里先总结返回数组的引用的的函数声明写法&#xff08;下面的Type是数组元素的类型&#xff0c;可以是int、float等&#xff0c;如果要…

企业架构相关

数据架构的作用首先是找到所有的业务对象 和数据对象。 在数据对象分析里面有一个重点就是主数据识别和分析。

OpenCV项目开发实战--使用 EigenFaces 进行人脸重建 (含C++/Python源码)

在这篇文章中,我们将学习如何使用 EigenFaces 重建面部。这篇文章是为初学者写的。如果您不了解主成分分析 (PCA) 或 EigenFaces。 什么是特征脸? 特征脸是可以添加到平均(平均)脸部以创建新的面部图像的图像。我们可以用数学方式将其写为: 在哪里,

【周赛364-数组】最大二进制奇数-力扣 2863 题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

vue pc端/手机移动端 — 下载导出当前表格页面pdf格式

一、需求&#xff1a;在手机端/pc端实现一个表格页面&#xff08;缴费单/体检报告单等&#xff09;的导出功能&#xff0c;便于用户在本地浏览打印。 二、实现&#xff1a;之前在pc端做过预览打印的功能&#xff0c;使用的是print.js之类的方法让当前页面直接唤起打印机的打印预…

win11、win10使用python代码打开和关闭wifi热点的正确方法

问题一 win10、win11&#xff0c;可以在任务栏的WIFI图标启动移动热点&#xff0c;但是无法设置SSID和密码。在网上搜索好久&#xff0c;无解。 万能的网络解决不了&#xff0c;只能自己动手解决了。 问题二 我当前的WiFi驱动程序不支持承载网络&#xff0c;如果我输入netsh…

JMeter+Python 实现异步接口测试

当使用JMeter和Python来实现异步接口测试时&#xff0c;可以按照以下步骤进行操作&#xff1a; 1、安装JMeter和Java Development Kit&#xff08;JDK&#xff09;&#xff1a; 下载并安装JMeter&#xff08;https://jmeter.apache.org/download_jmeter.cgi&#xff09;和适用…

数组06-滑动窗口

目录 LeetCode——209. 长度最小的子数组 分析&#xff1a; LeetCode——844. 比较含退格的字符串 分析&#xff1a; LeetCode——209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续…

Apache Doris 行列转换可以这样玩

行列转换在做报表分析时还是经常会遇到的&#xff0c;今天就说一下如何实现行列转换吧。 行列转换就是如下图所示两种展示形式的互相转换 1. 行转列 我们来看一个简单的例子&#xff0c;我们要把下面这个表的数据&#xff0c;转换成图二的样式 image-20230914151818953.png …

计算机网络补充

未分类文档 CDMA是码分多路复用技术 和CMSA不是一个东西 UPD是只确保发送 但是接收端收到之后(使用检验和校验 除了检验的部分相加 对比检验和是否相等。如果不相同就丢弃。 复用和分用是发生在上层和下层的问题。通过比如时分多路复用 频分多路复用等。TCP IP 应用层的IO多路…

Coupang新手教程,Coupang怎么收款?——站斧浏览器

coupang新手教程 韩国coupang入驻条件很简单&#xff0c;只需要你提供注册四件套就可以了&#xff1b; Coupang的经营模式呢可以说和我们国内的电商比较像&#xff1b; 前期可以做无货源模式&#xff1b;在熟悉平台一段时间后&#xff0c;可以去打造我们自己的精品店铺&…

start()方法源码分析

当我们创建好一个线程之后&#xff0c;可以调用.start()方法进行启动&#xff0c;start()方法的内部其实是调用本地的start0()方法&#xff0c; 其实Thread.java这个类中的方法在底层的Thread.c文件中都是一一对应的&#xff0c;在Thread.c中start0方法的底层调用了jvm.cpp文件…

Python机器学习实战-特征重要性分析方法(4):相关性分析(附源码和实现效果)

实现功能 计算各特征与目标变量之间的相关性。相关性越高的特征越重要。 实现代码 import pandas as pd from sklearn.datasets import load_breast_cancer import matplotlib.pyplot as pltX, y load_breast_cancer(return_X_yTrue) df pd.DataFrame(X, columnsrange(30)…

TLS/SSL(八) 基于ECC椭圆曲线的ECDH协议

一 ECC椭圆曲线的特性 ① DH密钥交换两个问题 1、计算过程含有大量的乘法,运算速度比较慢2、安全性基于大因数分解比较困难,需要比较长的密钥位数说明&#xff1a; 互联网主要使用ECDH的密钥交换协议,是基于DH密钥交换协议的升级备注&#xff1a; ECDH基于ECC椭圆曲线的原…