美文网首页
Python基础笔记2025

Python基础笔记2025

作者: 这货不是王马勺 | 来源:发表于2025-03-10 15:49 被阅读0次

详见第五章

https://liaoxuefeng.com/books/python/advanced/iterate/index.html

1.运算符

1.1 算数运算

+
-
*
/
//
%

1.2 比较运算

>
<
>=
<=
==
!=
is 判断是否是同一个对象,一般用来判断是否是空(None)
not is 判断是否不是同一个对象

a = None
print(a is None)

1.3 赋值运算

=
此外a = a + 1也可以写成 a += 1
同理-= = / ...也是一样的。

1.4 逻辑运算

and
or
not
计算规则:相同运算符之间,从左往右算;不同的组合,优先括号,再not,再and,最后是or。
组合逻辑运算时需要根据优先级用括号括起来。
注:对于数字来说,0可以表示F,非0可以表示T,但是输出结果都是数字,根据运算顺序来,比如

print(0 and 2)
# 结果是0,因为前面是0,所以不用算后面的数了,结果一定为F
print(32 and 4)
# 结果是4,因为前面是T,后面的也要算,输出结果是后面的数字
print(33 or 28)
# 结果是33

1.5 成员运算

in 是否存在于xxx
not in 是否不存在于xxx


下面几章对重要数据类型做说明。

2.bool类型

所有的数字,非0都是True,0是False
所有的字符串,只有空字符串是False,其他都是True
所有的列表,只有空列表是False,其他都是True
None是False

print(bool(""))   #False
print(bool(" "))   #空格也是True
print(bool([]))    #False
print(bool([""]))    #列表里有东西,即便东西是空字符串,也为True
print(bool(None))   #False

0,"",[],(),{} ,set(), b'', None都表示False,python中所有表示空的都是False,可以和if或者while结合使用,如:

info = []
if info:
  print("采集到了")
else:
  print("没采集到")

info = []
if not info:
  print("没采集到")

3.字符串类型(重要)

3.1 字符串索引切片

打印s中的第1个字符:

s = "python是世界上最好的编程语言"
print(s[0])   # 结果是p

注:索引是从0开始计算的,0表示正数第一个,-1表示倒数第一个

切片规则[start: end],左闭右开,即start能取到,end取不到。
start如果不写,表示从头开始取;end同理。
如果要跳着取可以使用[start:end:step],其中step定义步长,step如果是正数则表示从左到右,负数表示从右到左。

s = "python是世界上最好的编程语言"
print(s[1: 4])   # 结果是yth
print(s[: 4])   
print(s[4:])   
print(s[::2])     #表示从头开始取到尾,每2个取1个

判断一句话是否是回文(从左往右和从右往左是一样的),这时候就可以使用此功能进行翻转

s = "上海自来水来自海上"
s1 = s[::-1]
if s == s1:
  print("是回文")
else:
  print("不是回文")

3.2 字符串各种操作

大前提:python中的字符串是一个不可变的数据类型,不是说变量不可变,而是说数据是不可变的(相应的内存地址存了这个字符串)
因此字符串操作必须进行赋值,如:

s = "wwj"
s1 = s.capitalize()
print(s)
print(s1)

查看字符串都有哪些操作?

print(dir(str))
3.2.1 strip()

用来去掉字符串左右两端的空白(空格,水平制表符\t,回车\r,换行\n):

s = "   q   w   e   r    "
s = s.strip()
print(s)   # 结果是q   w   e   r

用来去掉字符串左右两端的其他字符串:

s = "_sb_qwer_sb_"
s = s.strip("_sb_")
print(s)    # 结果是qwer
3.2.2 replace()

替换:

s = "sb很爽"
s = s.replace("sb" , "上班")
print(s)   # 结果是上班很爽

去掉空白符:

s = s.replace(" " , "").replace("\n" , "").replace("\r" , "").replace("\t" , "")

如果用正则re则可以写成这样:

import re   # 导入正则表达式模块
kongbai = re.compile(r"\s")  #编译一个正则表达式模式,\s匹配任何空白字符,r表示使用原始字符串,防止转义符被误解
r = kongbai.sub("" , s) #使用编译好的正则表达式对象,进行替换操作,sub方法会找到字符串s中所有匹配空白字符的部分并替换成""
print(r)

注:如果只需要单次替换,直接使用下面的写法更简洁:

re.sub(r"\s", "", s) 

编译正则表达式 (re.compile) 的优势在于多次重复使用时提高效率。

3.2.3 split()

用于字符串切割。

s = "wwj_wxz_wyx"
result = s.split("_")  # 用下划线切割
print(result)    # 结果是列表['wwj', 'wxz', 'wyx']
3.2.4 startswith

判断是否以什么开头

s = "张福永"
print(s.startswith("张"))  # True
3.2.5 upper

将字符串转换为大写,一般用于忽略用户输入的大小写的时候

while True:
  r = input("请输入(输入Q退出)")
if r.upper() == "Q":
  break
print("你输入的是", r)
3.2.6 join()

用于字符串拼接

lst = ["wwj", "wxz", "wyx"]   # 定义一个列表
s = "_".join(lst)    # 将列表中的元素用_进行拼接
print(s)
3.2.7 len()

用于计算长度(字符数),但不是字符串独有的。
之前的格式都是形如“字符串.操作”的形式,但len只用len即可,属于内置函数。

s = "张福永"
print(len(s))
3.2.8 find()和index

查找子串在字符串中的位置

s = "java是最好的"
r = s.find("是")
print(r)   # 也是从0开始,结果为4
r = s.find("是")
print(r)   # 结果也为4

注:find()如果不存在则返回-1,index()如果不存在则直接报错

3.2.9 isdigit()

判断字符串是否是数字组成的。
用于将字符串转换成数字之前校验,避免将int()无法转换的内容执行而报错。
注:缺陷是无法判断小数

3.3 for循环取字符串所有字符

s = "wwj wxz wyx"
for item1 in s:
  print(item)

4.列表类型(重要)

4.1 列表的索引和切片

主要作用是用来存储大量数据。python中使用[ ]表示列表(数组),
创建方式有两种:直接写[ ],或list()

lst = ["192.168.1.1", "192.168.1.2"]

列表对存储的数据没有类型的要求。
列表也具有索引和切片,逻辑和字符串一致,提取数据直接用索引就可以了。

lst = ["192.168.1.1", "192.168.1.2", "192.168.1.3" ,"192.168.1.4"]
ip = lst[0]
print(ip)
print(lst[1: 3])  #切片和字符串一致,左闭右开
print(lst[: : -1])  #从头到尾开始取,倒着取,步长是1,即倒着显示

注:列表是一个可以变化的数据类型,这点区别于字符串类型。

4.2 列表的操作

4.2.1 新增数据

append() 、insert()、extend().
append()是在原有基础的末尾追加,最常用。
注:append()没有返回值。

lst = []
lst.append("wwj")
lst.append("wxz")
lst.append("xlh")
print(lst)

insert()是在特定位置插入

lst.insert(2,"wyx")
print(lst)

extend()可以合并列表

lst1 = ["wwj","wxz","wyx"]
lst2 = ["xlh","xyc","xjc"]
lst1.extend(lst2)   # 把2合并到1里
print(lst1)
4.2.2 修改数据

用索引进行修改:list[index]="新数据"

lst1 = ["wwj","wxz","wyx"]
lst1[1] = "zfy"
print(lst1)
4.2.3 删除数据

list.pop(index) 或 remove("值")

lst1 = ["wwj","wxz","wyx"]
lst1.pop(1)
print(lst1)

查看被删的是谁:

lst1 = ["wwj","wxz","wyx"]
rm = lst1.pop(1)
print(lst1)
print(rm)

注:如果pop()不指定索引,则删的是最后一项。

remove()示例:

lst1 = ["wwj","wxz","wyx"]
lst1.remove("wxz")
print(lst1)

注:remove不返回任何东西;如果remove的值出现多次,则仅删除第一次出现的。一般不会做数据删除,基本都是改标识符让用户看不到。

4.2.4 查询数据

普通查询(直接用索引)

lst1 = ["wwj","wxz","wyx"]
item = lst1[2]
print(item)

循环遍历(最常用)

lst1 = ["wwj","wxz","wyx"]
for item in lst1
  print(item)

这种循环的缺陷是看不见索引。
想用for循环拿到索引如何实现?
需要用到range()函数,用于计数。
如:
for i in range(5): #意思是i从0到4(取不到5)
for i in range (5,10): #意思是i从5到9(取不到10)
for i in range (5,10, 2): #意思是i从5到9(取不到10),且步长为2,即5 7 9;所以range()逻辑和切片逻辑类似。

注:while循环也可以实现,一般while用于无法判定循环次数的情况,for用于固定循环次数的情况。两种都要掌握

取索引+元素,将x开头的改成w开头的,示例:

lst = ["wwj","wxz","wyx","xlh","xyc","xjc"]
for i in range(len(lst)):
  item = lst[i]
  if item.startswith("x"):
    item = "w" + item[1:]  # 赋值给item变量
    lst[i] = item  # 修改列表
  # print(i, item)
print(lst)
4.2.5 range()

range()不仅用于让for循环数数,还经常用于快速生成列表
range(n)表示0~n,取不到n
range(m, n)表示m~n,取不到n
range(m, n, p)表示m~n,取不到n,步长为p

lst = list(range(555,666))
print(lst)
4.2.6 其他操作
lst = [11,22,33]
print(lst.index(22))  # 打印列表中数据元素的位置

lst.reverse() # 让列表翻转
print(lst)

lst.sort() #排序,数字是可以排序的,字符串规则可能不一样
print(lst)

5.元组类型(不做重点)

可理解为不可变的列表,也能索引和切片,但不能进行增删改操作。
在python中用()表示元组,元组末尾一般会写个逗号,用于和算术优先级里的括号区分
如:(1,)
空元组用tuple
此外下面这种也是元组,即小括号省略

a = 1,2,3,4
print(a)  # 显示(1,2,3,4)

python提供了解包的语法帮助快速取出元组中的数据

a = 1,2
b = a[0] #传统模式,用索引定位
c = a[1] 
print(b,c)
d, f = a #注意解包出来的数量必须完全一致
print(d,f) #结果与用索引定位相同

还有写成这样的:

a,b = 1,2

元组中如果套了一个列表则也可以修改:

t = (11,22,33,["wwj","wxz"])
t[3].append("wyx")
print(t)

6.字典类型(重要)

列表取元素很难,没有索引就无法定位到元素。
而字典就非常容易,也非常快,是k-v形式:

dic = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
dic['Michael']

通过key即可获取value。

  • 字典有两种方式,一个是{},一个是dict()。
  • 字段的key:不能重复、相同key后存进去的value会把之前的冲掉;必须是不可变的数据类型(因为hash值就变了),即可哈希的

6.1 新增数据

dick[key] = value

dic = {}
dic["一号床"] = "wwj"
dic["二号床"] = "wxz"
dic["三号床"] = "wyx"
print(dic)

(不用考虑字典顺序)

6.2 给字典改数据

(接上一段)

dic["三号床"] = "zfy"
print(dic)

即冲掉即可。

6.3 给字典删数据

根据key来删
dic.pop(key)

6.4 查询

  • 普通查询
print(dic['三号床'])  #如果key不存在则报错,但这种情况使用较多,因为我们都是知道key的
print(dic.get("三号床")) #如果key不存在则返回none
print(dic.get("三号床"),"naonao") #如果key不存在则返回默认值,此例为naonao
  • 循环遍历(不推荐)
    for key in dict:
    value = dict[key]
    例:
for k in dic:
  print(k, dic[k])

可以拿到所有的key - value。
另外还有一种方法只能拿到value(无法通过values拿到keys):

for v in dic.values():
  print(v)

一次性取所有values并转换成列表:

print(list(dic.values()))

还有一个同时拿k,v的方法:

for k, v in dic.items():
  print(k, v)

6.5 字典和列表的嵌套

dic = {
  "name": "naonao",
  "age": 18,
  "weight": 90,
  "ex": {
    "name": "wjn",
    "age": 18,
    "weight": 50,
    "ex":{
      "name": "wsn",
      "age": 21,
      "weight": 95
    }
  }
  "dad":[
  {"name":"wwj","age":18},
  {"name":"wxz","age":18}
  ]
}

查找naonao的ex的ex的名字(一层一层往里找):

print(dic['ex']['ex']['name'])

修改naonao的ex的体重:

dic["ex"]["weight"] += 10
print(dic)

获取naonao所有dad的名字:

for item in dic['dad']:
  print(item['name'])

总的来说一层一层扒即可。

练习:统计一个字符串中,每个字符出现的次数。

7.set集合类型(不做重点)

可当成只存储key的字典。
两种方式:
{},只有key没有value,
set() 空集合只能用这种方式

1.数据是不重复的(重复的话打印出来也只出来第一个)
2.数据必须是不可变的数据类型

7.1 增加数据

s.add("key")
print(s)

7.2 查找

for 循环遍历

for item in s
  print(item)

7.3交并差集

基本用不上

7.4去重(最常用)

lst = [11,22,33,11,22,33]
s = set(lst)   #把列表丢给集合
print(s)

想转回列表:

s = list(set(lst))

注意顺序是乱的

相关文章

网友评论

      本文标题:Python基础笔记2025

      本文链接:https://www.haomeiwen.com/subject/aczgpjtx.html