第一章Python语言基础(中)

前言

详见前文

目录

目录

前言

目录

基础数据结构

(铺垫)可迭代对象

列表

列表下标

添加元素(可迭代对象)

删除元素

根据位置删除

根据元素删除

查找元素

其他

对列表的操作

列表遍历

创建数值列表

列表操作符

列表解析式

列表切片

列表复制

元组

元组创建

字符串

字符串简介

转义字符

字符编码ord和chr

字符串常用方法(常用函数)

判断(类的函数)

转换(类的函数)

查找(类的函数)

字符串修改(与列表)

这里太多了,单独开个链接!

format格式化

占位符{}

占位符控制数字的输出格式

字典dict

创建字典

zip函数与zip数据类型

访问字典

字典基本操作

添加或修改元素

删除元素

遍历字典

判断是否存在元素

拷贝字典

合并两个字典(字典更新)

例题

集合

创建集合

遍历集合

其他

集合基本操作

添加元素

删除元素

判断类方法

日期和时间

time模块

获取本地时间

格式化日期

time的format格式

datetime模块

date

time

datetime

timedelta

和字符串的互换(格式化)

当前日期

补充


基础数据结构

(铺垫)可迭代对象

包括列表,元组,字典,字符串

列表

笔者目前认为列表是最简单好用的数据结构,C没有

a=[element1,element2,...,elementN]

element可以是任意数据、数据结构

列表下标

访问元素使用下标

总合法使用范围[-n,n-1]

[0,n-1]正着用,[-n,-1]倒着用

添加元素(可迭代对象)

末尾添加

a.append()末尾添加单个

a.expend()添加多个(不能是单个数字)

中间插入

a.insert(下标,x)在下标处添加x

删除元素
根据位置删除

del a[idx]建议少用

a.pop(idx)

a.pop()不输入idx默认最后一个

区别:del不返回删除值,pop返回删除值

eg:b=a.pop(1)

根据元素删除

a.remove(x)删掉从左往右第一个x

删除列表所有的x:加个循环和成员运算符in

while x in a:

        a.remove(x)

查找元素

a.count(x)计算x出现的次数

a.index(x,start,stop)查找x在[start,stop)列表中第一次出现的位置

start,stop要是不写的话默认是整个列表

注意:index若在[start,stop)没有找到会报错,count不会

其他

a.reverse()将列表前后翻转

len(a)求列表长度

a.clear()清空列表,删库跑路

对列表的操作
列表遍历

for循环

for x in a:        这里a列表作为可迭代对象(for的需要)

        xxx

enumerate函数

可以在遍历是同时获取下标idx(只是一个变量可改名)(下标用于循环控制)

enumerate(a,start=y)y默认为0

for idx,x in enumerate(a):同时得到idx和x一一对应

        xxx

创建数值列表

list()

a=list(应该是放一个可迭代对象,没看明白英文注释)

eg:a=list(range(5))        a=list([2,3,4])

列表操作符

+连接两个列表:c=a+b

a*x a复制x次:c=a*2

对于纯数字的列表:

sum(a)求列表元素和

max(a)求最大值

min(a)求最小值

列表解析式

基于已有列表通过解析式关系(expression)生成新列表

[expression for member in 已有列表或者可迭代对象名  (if  条件)]

a= [x**2 for x in range(11) if x % 2 == 0]
列表切片

与range()的start end step定义相同,只不过切片可以切所有列表不只是数字

(新列表名=) a[start:end:step]

注意:必须在[ ]内打出一个冒号‘:’

列表复制

和C语言一样若直接b=a则只是给了首地址,ab都对应同一个列表不是复制

真正的复制

a.copy()复制函数

b=a[:]利用切片复制

元组

(劣化版的列表)

元组是创建后不能修改的定死的列表!

元组创建

从[ ]变成() a=(element...)

从list()变成tuple()  a=tuple(可迭代对象)

字符串

字符串简介

看成是字符型的列表即可

‘ ’或者" "都可以,与C不同

与列表一样的下标,切片,+,*,len(),in,not in用法

str()强制转化字符串函数

转义字符

\开头,和C语言一样

用于输出直接使用有特殊功能的字符如' "

\n \t

字符编码ord和chr

注意是单个字符,不是对字符串整体编码

一般不用python的unicode码吧,一般用acsll码

ord() 字符->unicode

chr() unicode->字符

字符串常用方法(常用函数)

注意:一般都是后缀a.hanshu()不是hanshu(a)

函数可以复合eg:a=a.title().swapcase()

判断(类的函数)

isalnum()  (alnum感觉是all num的简写)是否全是字母或者数字

isalpha()是否全是字母或中文字符

isdigit()是否全是数字

islower()

isupper()

isspace()

istitle()是否首字母大写(标题形式)

转换(类的函数)

字符串本身不变,返回一个新的字符串。也可以a=a.hanshu()

title()标题化函数

lower()

upper()

swapcase()大小写互换

strip([chars])删掉字符串两端的指定字符(不输入chars默认删空格)

lstrip([chars])只删left左边的

rstrip([chars])只删right右边的

replace(old,new[,max])将字符串的old换成new,可以加max限制最多换的个数

center(wide,fillchar)使用fillchar字符将字符串放在wide长度的中间

ljust(wide[,fillchar])同理左对齐,默认fillchar为空格

rjust(wide[,fillchar])右对齐同理

查找(类的函数)

count(str[,beg,end])查找str字符串在字符串出现的次数,也可以加在[beg,end)中查找(count可用于列表)

find(str[,beg,end])同理,查找str是否存在,存在返回第一个该str的下标,不存在返回-1

rfind(str[,beg,end])从右往左的find

index(str[,beg,end])与find功能相同,但是不存在会报错,不推荐

rindex(str[,beg,end])从右往左的index

startswith(substr[,beg,end])专门检测开头的find,返回bool,也可用find替代

endswith(suffix[,beg,end])同理,检测结尾

字符串修改(与列表)

字符串改成列表之后就可以修改了

list(字符串)直接转列表,每个字符一个元素

split()字符串分割成多个字符串作为元素的列表

a.split([str=" ",num=a.len(str)])分隔识别符str默认为空格,num分隔次数默认为-1,最大不限

注意:若分隔字符为字符,分隔时会删去

这里太多了,单独开个链接!

主要有map和joint

http://t.csdnimg.cn/BplDr

format格式化

用format函数调整字符串输出格式

初级格式a='xx{}xx{}...'.format(a1,a2)

占位符{}

{}是占位符,强化的C的%占位符

{}直接使用,则每个占位符按顺序依次填入format中的参数

{数字}通过下标搜索format中参数填入

{参数名}通过名字搜索format中参数填入,注意:这种format()中要参数要同时赋值

eg:a='{price}'.format(price=14.25) age要在括号中赋值

占位符控制数字的输出格式

{:}在占位符中间加冒号

[fill[align]][sign][#][0][width][,][.precision][type]

上面完整的参数表笔者也没有完全搞清楚,讲几个常用功能

[fill[align]][sign][width][.precision][type]

type数据输出类型

(s字符串,d十进制整数,fF十进制浮点数,c转换成unicode,eE科学计数法,b二进制,o八进制,xX十六进制,%显示百分比)

.precision保留小数位数(和C一样)(是四舍五入)

width数的宽度(和C一样)

sign有无符号数

(+表示正负数前都带符号,默认为-只有负数带符号,space表示正数符号位给空格)

fill空白处填充的字符

align数据对齐方式 <左对齐,>右对齐,^居中

b=3.1415926
b='{b:x<+5.1f}'.format(b=b)
print(b)

字典dict

数学中的映射关系

{key1:value1,key2:value2...}

输入一个key(key只能是数字,字符串,元组)(key名不能重复)

就可以找到一个value(value都可以)

创建字典

a=dict( [ [key1,value1],[key2,value2]... ] )注意中括号

或者换成都是两个元素的元组a=dict( [ (key1,value1),(key2,value2)... ] )注意中括号

这里不推荐使用a=dict(key1=value1,...)

还可以a={key1:value1,...}

zip函数与zip数据类型

和map函数一样同理,zip函数返回的是zip数据类型,不能直接print(应该也是首地址)

zip(sequence1,sequence2,...)

把多个序列下标相同的元素组装成元组(不可变),返回一个可迭代对象但是是zip类型

一般zip后用list将zip转换为list,转换一次后zip为空不能再转。

然后用dict()将list转成dict

a=dict(list(zip(keys,value)))

访问字典

通过key得到value,把key看作下标

知道key一定存在时

a[key]返回的是对应的value

key不一定存在时

a.get(key[,x])查key查到返回value查不到默认返回None(可修改为x)

字典基本操作
添加或修改元素

直接利用key value关系

a[key]=value

删除元素

del a[key]

或者a,pop(key)

遍历字典

for加上keys value items(用于遍历二元组(keys,value))

for x in a.keys():

for x in a.value():

for x,y in a.items():

判断是否存在元素

用in 和not in加上keys value items返回bool

x in a.keys()

x in a.value()

(x,y) in a.items()

拷贝字典

和list一样,直接a=b只是加了个别名,控制的是同一个字典

要用copy

b=a,copy()

合并两个字典(字典更新)

a.update(b)把字典b更新给字典a

如果b有a没有的就新增给a

如果b的key在a有,则直接更新对应的value

例题

统计字符串各字母个数

s=input()
Count={}
for c in s:
    Count[c]=Count.get(c,0)+1
for k,v in Count.items():
    print('{}:{}'.format(k,v))

集合

和数学中的集合概念基本一样

集合内的元素不重复,无序!

只能放不可变的数据:数字,字符串,元组

a={element1,element2...}

创建集合

a={element1,element2...}

set(x)把可迭代对象x转成集合(一般是列表,元组)

set()空集

注意:用a={}创建的是空字典不是空集合

遍历集合

和列表,字典一样用for

for x in a:

其他

a.clear()清空集合

in not in判断是否存在x in a

len(a)集合长度即集合元素个数

集合基本操作
添加元素

a.add(x)

a.update(x)x是元素或者另一个集合

删除元素

a.remove(x)x不存在会报错

a.discard(x)x不存在不会报错

a.pop()随机删除一个

a.clear()清空

判断类方法

集合特有的基本特点

a.isdisjoint(b)判断ab是否不相交(dis不joint相交)

a.issubset(b)判断a是否是b的子集(sub子set集合)

a.issuperset(b)判断a是否是b的超集(b是a的子集)

交集a&b

并集a|b

差集a-b / b-a

对称差集a^b

不推荐用上面四个符号,推荐用下面的函数

b=a.intersection(b1,b2...)b是a,b1,b2...的交集(括号里最少填一个)

b=a.union(b1,b2...)b是a,b1,b2...的并集(括号里最少填一个)

c=a.difference(b)c是a-b的差集

c=a.symmetric_difference(b)c是a,b的对称差集

日期和时间

总结:time相当于计时器,datetime相当于闹钟

time模块

可以获取时间戳,可用于计时

Python用xxx模块需要先import xxx

需要调用时:time+.+功能名称(相比datetime只有一种类型,简单)

时间戳函数:time()

a=time.time()返回a浮点数表示时间戳(第一个time表示调用time模块,第二个是时间戳函数)

睡眠程序:sleep()

time.sleep(x)程序睡眠x秒

获取本地时间

time.localtime():返回本地时间,是一个struct_time对象(就是一个结构体),struct_time对象之间不可加减(因为是结构体)

可以打开struct_time看看

import time
a=time.localtime()
print(type(a))
print(a)

a=time.localtime()[.xxx函数]

自带tm(time的简写)系列函数

.tm_year

.tm_mon

.tm_mday(month day一个月的第几天)

.tm_hour

.tm_min

.tm_sec

.tm_wday(week day一个月的第几天)

.tm_yday(year day一年的第几天)

.tm_isdst夏令时标识

格式化日期

time.strftime(format[,t]):把时间t按照format格式转换,返回一个字符串(time-format格式->str)

如“2024-2-14”字符串

time.strptime(string,format):把字符串按照format格式,返回一个时间(str-format格式->time)

strftime与strptime互逆

import time
t=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
print(type(t))
print(t)

t=time.strptime(t,"%Y-%m-%d %H:%M:%S")
print(type(t))
print(t)
time的format格式

小写字母是缩写,大写字母是完整名称

年月日时分秒%Y %m(month) %d %H(hour) %M(minute) %S(second)

datetime模块

datetime支持日期和时间的运算,包括四种数据

date日期

time时间

datetime日期时间

timedelta时间间隔

date

date与date加减得timedelta

date与timedelta加减得date

date之间支持比较

定义date:

a=datetime.date(年,月,日)

eg:a=datetime.date(2024,2,15)

获取年月日:

a.year

a.month

a.day

a.weekday()周几,周一到周日0-6

time

与date同理

但是time不支持加减,要转换成datetime加减

a=datetime.time(20,42,1)

a.hour a.minute a.second

datetime

同理date,相当于date加上time

a=datetime.datetime(2024,2,15,20,42,1)(可以只填前几个依次识别)

a.year到a.weekday()到a.second全都能用

可以用combine合并date和time到一个datetime

a=datetime.datetime.combine(b,c)

timedelta

时间差

时间差存储单位:days,seconds,microseconds(微秒)

时间差定义时可用单位:weeks,days,hours,minutes,seconds,milliseconds(微秒),microseconds

定义后自动转化为存储单位

eg:a=datetime.timedelta(weeks=1)

与datetime不同:只能输出时间差存储单位a.days这三类

特别地:还可以输出a.total_seconds()全部转化为秒(只有秒有这个快捷函数)

和字符串的互换(格式化)

同理time的

eg:a=datetime.datetime(2024,2,15,20,42,1)

a.strftime(format[,t]):把时间t按照format格式转换,返回一个字符串(time-format格式->str)

如“2024-2-15”字符串

datetime.(四种类型一种).strptime(string,format):把字符串按照format格式,返回一个时间(str-format格式->time)

strftime与strptime互逆

import time
t=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
print(type(t))
print(t)

t=time.strptime(t,"%Y-%m-%d %H:%M:%S")
print(type(t))
print(t)

import datetime
a=datetime.datetime(2024,2,15,20,42,1)

b=a.strftime("%Y %S")
c=datetime.datetime.strftime(a,"%Y %S")
print(b)
print(type(b))
print(c)
print(type(c))

d=datetime.datetime.strptime(c,"%Y %S")
print(d)
print(type(d))
e=a.strptime(c,"%Y %S")#这里不知道为什么a就算不参与转换也能用,虽然我知道a是datetime.datetime型
print(e)
print(type(e))

注意:strptime转换时格式必须完全对应,参数必须用尽(可以先提取一下)

strptime转出来的时间,未给参数的默认为0

当前日期

datetime.date.today()

datetime.datetime.now()(datetime包里的datetime类型)

补充

补充1

小数点精度控制

目前笔者搜到的只有四舍五入的

格式化方法比round更通用,和C类似

print('%.2f'%x) x四舍五入保留两位小数

补充2

可迭代对象和序列的关系

序列是特殊的可迭代对象

可迭代对象是指能够一次返回一个成员的对象,例如列表、字符串、元组、字典和自定义对象。序列是一种特殊的可迭代对象,它支持通过整数索引访问元素,并且定义了len()方法来返回序列的长度。

最后一个补充

求三连!

  • 53
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值