栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

6月28日Python基础学习笔记

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

6月28日Python基础学习笔记

文章目录
  • 前言
  • 一、可变字符串
  • 二、列表
    • 1、特点
    • 2、内存分析
    • 3、列表的创建
      • (1)、[] 创建
      • (2)、list() 创建
      • (3)、range() 创建整数列表
      • (4)、推导式生成列表
    • 4、元素的添加
      • (1)、.append()
      • (2)、+ 运算符
      • (3)、.extend()
      • (4)、.insert() 插入元素
      • (5)、乘法扩展
    • 5、元素的删除
      • (1)、del 删除
      • (2)、pop()
      • (3)、remove()
    • 6、元素的访问
      • (1)、通过索引直接访问元素
      • (2)、.index()
      • (3)、.count()
      • (4)、len()
      • (5)、成员资格判断
      • (6)、列表的遍历
    • 7、slice 切片
    • 8、复制
    • 9、排序
      • (1)、修改原列表,不建新列表的排序
      • (2)、建新列表的排序
      • (3)、reversed() 返回迭代器
    • 10、二维列表
  • 三、元组
    • 1、特点
    • 2、元组的创建
      • (1)、通过 () 创建
      • (2)、通过 tuple() 创建
      • (3)、zip 函数
      • (4)、生成器推导式创建元组
    • 3、元素的访问
    • 4、元组的排序


前言

本文为6月28日Python基础学习笔记,分为三个章节:

  • 可变字符串:使用 io.StringIO 原地修改字符串;
  • 列表:特点、存储方式、4种创建列表的方式、元素的添加、删除、访问、slice 切片、排序以及二维列表的嵌套循环打印;
  • 元组:特点、4种创建元组的方式、元组中元素的访问、排序,需注意的是生成器推导式创建的元组是一个生成器对象。

一、可变字符串

Python 中,字符串属于不可变对象,不支持原地修改。但可以使用 io.StringIO 原地修改字符串。

s = "good morning, tunwu."
sio = io.StringIO(s)

sio
>>> <_io.StringIO object at 0x000002132A1337F0>

sio.getvalue()
>>> 'good morning, tunwu.'

sio.seek(14)
>>> 14
sio.write("T")

>>>1

sio.getvalue()
>>> 'good morning, Tunwu.'

二、列表

用于存储任意数目、任意类型的数据集合 称为列表,如:

a = [10, 20, 30, 40]

其中,10,20,30,40 称为列表 a 的元素。 列表中的元素可以各不相同,可以是任意类型。
列表常用的修改方法如下:

语法类型描述
.append(x)增加元素增加元素 x 到列表尾部
.extend(aList)增加元素将列表 alist 所有元素加到原列表尾部
.insert(index,x)增加元素在原列表指定位置 index 处插入元素 x
.remove(x)删除元素在原列表中删除首次出现的指定元素 x
.pop([index])删除元素删除并返回原列表指定为止 index 处的元素,默认是最后一个元素
.clear()删除所有元素删除列表所有元素,并不是删除列表对象
.index(x)访问元素返回第一个 x 的索引位置,若不存在,抛出异常
.count(x)计数返回指定元素 x 在列表中出现的次数
len(list)列表长度返回列表中包含元素的个数
.reverse()翻转列表所有元素原地翻转
.sort()排序所有元素原地排序
.copy()浅拷贝返回列表对象的浅拷贝
1、特点
  • 大小可变,根据需要随时增加或缩小;
2、内存分析

在内存中,按照如下方式存储。序列中存储的是整数对象的地址,而不是整数对象的值。常用的序列结构有:

  • 字符串;
  • 列表;
  • 元组;
  • 字典;
  • 集合。
3、列表的创建 (1)、[] 创建
a = [10,20,'tunwu', 'LI']
a = [] # 空列表
(2)、list() 创建

使用 list()可以将任何可迭代的数据。

a = list() # 空列表

a = list(range(5))
a
>>> [0, 1, 2, 3, 4]

a = list("Tunwu LI") 
a
>>> ['T', 'u', 'n', 'w', 'u', ' ', 'L', 'I']
(3)、range() 创建整数列表

语法格式为:

range([start,] end [,step])

  • start 参数:可选,表示起始数字。默认是 0;
  • end 参数:必选,表示结尾数字;
  • step 参数:可选,表示步长,默认为 1。
    range() 返回的是一个 ** range 对象** 而不是列表。 我们需要通过 list()方法将其转换成列表对象。如:
list(range(3,15,2))
>>> [3, 5, 7, 9, 11, 13]
(4)、推导式生成列表
a = [x*2 for x in range(5)]
a
>>> [0, 2, 4, 6, 8]

a = [x*2 for x in range(18) if x%3 == 0]
a
>>> [0, 6, 12, 18, 24, 30]
4、元素的添加

除非必要,一般只在列表的尾部添加元素或删除元素, 这会大大提高列表的操作效率。

(1)、.append()

原地修改列表对象,是真正的列表尾部添加新的元素,速度最快, 推荐使用。

a = [1, 2]
a.append(3)
a
>>> [1, 2, 3]
(2)、+ 运算符

创建新的列表对象, 将原列表的元素和新列表的元素依次复制到新的列表对象中。 对于操作大量元素不建议使用。

a = [1, 2]
id(a)
2281332683200

a = a + [3]
a
>>> [1, 2, 3]
id(a)
2281333727168

==变量 a 的地址发生了变化。==也就是创建了新的列表对象。

(3)、.extend()

将目标列表的所有元素添加到本列表的尾部,属于原地操作。

a = [1, 2]
a.extend([3, 4])
a
>>> [1, 2, 3, 4]
(4)、.insert() 插入元素

使用 insert() 将指定的元素插入到列表对象的指定位置。这样会让插入位置后面的所有元素移动, 会影响处理速度。涉及大量元素时,尽量避免使用。

a = [1, 2, 3]
a.insert(1, 10)
a
>>> [1, 10, 2, 3]
(5)、乘法扩展

生成一个新列表, 原列表元素的多次重复。

a = ['hello', 666]
b = a*5
b
>>> ['hello', 666, 'hello', 666, 'hello', 666, 'hello', 666, 'hello', 666]
5、元素的删除 (1)、del 删除

删除列表指定位置的元素。

a = [1, 2, 3, 4]
del a[1]
a
>>> [1, 3, 4]
(2)、pop()

删除并返回指定位置元素, 如果未指定位置则默认操作列表最后一个元素。

a = [1, 2, 3, 4, 5]
a.pop()
>>> 5
a
>>> [1, 2, 3, 4]

a.pop(0)
>>> 1
a
>>> [2, 3, 4]
(3)、remove()

删除首次出现的指定元素, 若不存在该元素抛出异常。

a = [10,20,30,40,50,20,30,20,30]
a.remove(20)
a
>>> [10, 30, 40, 50, 20, 30, 20, 30]
6、元素的访问 (1)、通过索引直接访问元素
a = [10,20,30,40,50,20]
a[4]
>>> 50
(2)、.index()

获得指定元素在列表中首次出现的索引。
语法:

index(value, [start, [end]])

其中,start 和 end 指定了搜索的范围。

a = [10,20,30,40,50,20,30,20,30]
a.index(20)
>>> 1

a.index(20, 3) # 从索引位置 3 开始往后搜索的第一个 20
>>> 5

a.index(20, 4, 8) #从索引位置 4 到 8 这个区间出现的第一个 20
>>> 5
(3)、.count()

返回指定元素在列表中出现的次数。

a = [10,20,30,40,50,20,30,20,30]
a.count(20)
>>> 3
(4)、len()

返回列表长度,即列表中包含元素的个数。

a = [10,20,30,40,50,20,30,20,30]
len(a)
>>> 9
(5)、成员资格判断
  • 可以使用 count() 方法,返回 0 则表示不存在,返回大于 0 则表示存在。
a = [10,20,30,40,50,20,30,20,30]
30 in a
>>> True

200 in a
>>> False
(6)、列表的遍历
for obj in listObj:
	print(obj)
7、slice 切片

语法格式:

[起始偏移量 start : 终止偏移量 end[ : 步长 step])

a = [10,20,30,40,50,20,30,20,30]

a[1:6:2] 
>>> [20, 40, 20]

a[-3::]
>>> [30, 20, 30] # 倒数3个

a[::-1]
>>> [30, 20, 30, 20, 50, 40, 30, 20, 10] # 逆序
8、复制
list1 = [30, 40, 50]
list2 = list1

只是将 list2 也指向了列表对象,即 list2 和 list2 持有相同地址,列表对象本身的元素并没有复制。

实现列表元素内容的复制如下:

list1 = [30, 40, 50]
list2 = [] + list1
9、排序 (1)、修改原列表,不建新列表的排序
a = [10,20,30,40,50,20,30,20,30]

a.sort() # 升序(默认)
a
>>> [10, 20, 20, 20, 30, 30, 30, 40, 50]

a.sort(reverse=True)
a
>>> [50, 40, 30, 30, 30, 20, 20, 20, 10] # 降序

import random
random.shuffle(a)
a
>>> [30, 20, 30, 30, 50, 20, 10, 20, 40] #乱序
(2)、建新列表的排序

通过内置函数 sorted() 进行排序,返回新列表,不对原列表做修改。

a = [10,20,30,40,50,20,30,20,30]

a = sorted(a) # 升序(默认)
a
>>> [10, 20, 20, 20, 30, 30, 30, 40, 50]

b = sorted(a, reverse=True) # 降序
b
>>> [50, 40, 30, 30, 30, 20, 20, 20, 10]
(3)、reversed() 返回迭代器

内置函数 reversed() 不对原列表做任何修改,只是返回一个逆序排列的迭代器对象。

a = [10,20,30,40,50,20,30,20,30]

c = reversed(a)
c
>>> 

list(c)
>>> [30, 20, 30, 20, 50, 40, 30, 20, 10]

list(c)
>>> []

c 是:list_reverseiterator,即迭代对象。
再次使用 list© 进行输出,发现只能使用一次。第一次输出了元素,第二次为空。

10、二维列表

姓名年龄薪资城市
高小一1830000北京
高小二1920000上海
高小五2010000深圳
a= [ ["高小一",18,30000,"北京"],
     ["高小二",19,20000,"上海"],
     ["高小一",20,10000,"深圳"]]
     
print(a[1][0],a[1][1],a[1][2])
>>> 高小二 19 20000

# 嵌套循环打印二维列表所有的数据
for m in range(3):
    for n in range(4):
        print(a[m][n], end='t')
    print()  
    
>>> 高小一	18	30000	北京	
>>> 高小二	19	20000	上海	
>>> 高小一	20	10000	深圳

三、元组 1、特点

与列表不同,元组属于不可变序列,不能修改元组中的元素。 因此,元组没有增加元素、修改元素、删除元素相关的方法。

2、元组的创建 (1)、通过 () 创建
a = (10, 20, 30)

a = 10, 20, 30

a = 1, 
type(a)
>>> 
(2)、通过 tuple() 创建
b = tuple() # 空元组

b = tuple("abc")
b
>>> ('a', 'b', 'c')

b = tuple([2,3,4])
b
>>> (2, 3, 4)
(3)、zip 函数

zip(列表 1,列表 2,…) 将多个列表对应位置的元素组合成为元组,并返回这个 zip 对象。

a = [10,20,30]
b = [40,50,60]
c = [70,80,90]

d = zip(a, b, c)

d
>>> 

list(d)
>>> [(10, 40, 70), (20, 50, 80), (30, 60, 90)]
(4)、生成器推导式创建元组
  • 生成器推导式生成的 不是列表也不是元组,而是一个生成器对象。
  • 可以通过生成器对象,转化成列表或者元组。 也可以使用生成器对象的 **__next__() **方法进行遍历,或者直接作为迭代器对象来使用。
  • 元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象。
s = (x*2 for x in range(5))

s
>>>  at 0x000002132A0D7760>

tuple(s)
> (0, 2, 4, 6, 8)

tuple(s)
>>> () # 只能访问一次,第二次为空,需重新生成
3、元素的访问

与列表一样,只不过返回的仍然是元组对象。

a = (20,10,30,9,8)

a[:3]
>>> (20, 10, 30)
4、元组的排序

对元组排序,只能使用内置函数 sorted(tupleObj),并生成新的列表对象。语法如下:

sorted(tupleObj)

a = (20,10,30,9,8)

sorted(a)
>>> [8, 9, 10, 20, 30]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998384.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号