【Python】标准库的使用

椰椰椰耶 2024-09-16 08:05:07 阅读 79

文章目录

标准库日期计算字符串操作剑指offer 58,翻转单词顺序思路

leetcode 796,旋转字符串思路

leetcode 2255,统计是给定字符串前缀的字符串数目思路

文件查找工具

Python 通过模块来体现“库”

降低了程序猿的学习成本提高了程序的开发效率

就是是别人已经写好了的代码,可以让我们直接拿来用

荀子曰: “君子性非异也,善假于物也”

一个编程语言能不能流行起来,一方面取决于语法是否简单方便容易学习,一方面取决于生态是否完备

所谓的 “生态” 指的就是语言是否有足够丰富的库, 来应对各种各样的场景

实际开发中,也并非所有的代码都自己手写,而是要充分利用现成的库,简化开发过程

按照库的来源,可以大致分成两大类

标准库:Python 自带的库,只要安装了 Python 就可以直接使用第三方库:其他人实现的库,要想使用,需要额外安装,种类非常庞大

标准库

Python 自身内置了非常丰富的库.,在 Python 官方文档上可以看到这些库的内容

https://docs.python.org/3.10/library/index.html

简单来说, 主要是这些部分:

内置函数 (如 printinput 等)内置类型 (针对 intstrboollistdict 等类型内置的操作).文本处理时间日期数学计算文件目录数据存储 (操作数据库,数据序列化等).加密解密操作系统相关并发编程相关 (多进程, 多线程, 协程, 异步等).网络编程相关多媒体相关 (音频处理, 视频处理等)图形化界面相关…

日期计算

输入任意的两个日期,计算两个日期之间隔了多少天

使用 import 语句导入标准库的 datetime 模块使用 datetime.datetime 构造两个日期,参数使用年,月,日这样的格式两个日期对象相减,即可得到日期的差值

import datetime

date1 = datetime.datetime(2004,2,23)

date2 = datetime.datetime(2024,9,1)

print(date2 - date1)

"""

运行结果

7496 days, 0:00:00

"""

或者这样行写

from datetime import datetime

date1 = datetime(2004,2,23)

date2 = datetime(2024,9,1)

print(date2 - date1)

"""

运行结果

7496 days, 0:00:00

"""

或者这样写,将模块名重命名一下

import datetime as dt

date1 = dt.datetime(2004,2,23)

date2 = dt.datetime(2024,9,1)

print(date2 - date1)

关于 datetime 的更多操作,可以参考官方文档

https://docs.python.org/3/library/datetime.html

字符串操作

字符串是 Python 的内置类型,字符串的很多方法不需要导入额外的模块,即可直接使用

剑指offer 58,翻转单词顺序

https://leetcode.cn/problems/fan-zhuan-dan-ci-shun-xu-lcof/description/

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。

image.png

思路

针对上述字符串,使用空格进行切分。<code>split 方法,可以指定分隔符,把字符串分成多个部分,放到一个 list 里面针对方才的切分结果列表,进行逆序==> reverse将逆序后的列表,组合起来==> join

def reverseWords(s: str):

tokens = s.split(' ')

tokens.reverse()

return ' '.join(tokens)

s: str 是声明 s 是一个字符串变量

leetcode 796,旋转字符串

https://leetcode.cn/problems/rotate-string/

给定两个字符串,sgoal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true

s 的旋转操作就是将 s 最左边的字符移动到最右边。

例如,若 s = 'abcde',在旋转一次之后结果就是 'bcdea'

image.png

思路

使用 <code>len 求字符串的长度,如果长度不相同,则一定不能旋转得到将 s 和自己进行拼接,然后直接使用 in 方法来判定 goal 是否是 s + s 的子串.

def rotateSstring(s, goal):

if len(s) != len(goal):

return False

return goal in (s+s)

leetcode 2255,统计是给定字符串前缀的字符串数目

https://leetcode.cn/problems/count-prefixes-of-a-given-string/

给你一个字符串数组 words 和一个字符串 s ,其中 words[i]s 只包含小写英文字母。

请你返回 words 中是字符串 s 前缀的字符串数目。

一个字符串的 前缀 是出现在字符串开头的子字符串。子字符串是一个字符串中的连续一段字符序列

image.png|486

思路

遍历 <code>words,取出每个字符串判定当前这个字符串是否是 s 的前缀(s 是否是以这个字符串开头的)==>startwith

def countPrefixes(words: list, s: str):

count = 0

for word in words:

if s.startswith(word):

count += 1

return count

关于字符串的更多操作, 参考官方文档

https://docs.python.org/3/library/stdtypes.html#str

文件查找工具

搜索的关键就是对目录结构进行遍历

递归查找,遇到子目录,就进到目录里面进行查找

import os

inputPath = input('请输入待搜索路径: ')

pattern = input('请输入待搜索关键词: ')

for dirpath, dirnames, filenames in os.walk(inputPath):

for f in filenames:

if pattern in f:

print(f'{ dirpath}/{ f}')

os.walk 是一个遍历操作系统目录非常好用的一个办法

只需要使用简单的循环就能完成递归遍历目录的操作,不必手写递归代码os 传入的参数就是要从哪个目录开始进行遍历 dirpath 表示遍历到当前位置,对应的路径是什么dirnames 表示当前目录下都有哪些目录,是一个列表,可以包含多个目录dirnames 表示当前目录下都有哪些文件名,是一个列表,可以包含多个文件名os.walk 每次调用,都能自动的去针对子目录进行递归的操作,只需要使用上述循环,就可以把所有的路径都获取出来



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。