Python 基础笔记 day-3

这篇博客详细介绍了Python中的列表和元组,包括它们的创建、增删、访问和计数方法。列表作为可变序列,支持append、extend、insert等操作,而元组则是不可变序列。此外,还探讨了列表的排序、切片、内置函数如max、min、sum,以及多维列表和元组的使用场景。

列表

在这里插入图片描述

概述

列表:用于存储任意数目、任意类型的数据集合。
列表是内置可变序列,是包含多个元素的有序连续的内存空间
列表由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系
列表:有序、可变、元素类型可以不同

列表常用方法:
列表常用方法

列表的创建、增删、访问和计数

列表的创建

[]
myl2 = [1,2,'assad']
myl1 = []#创建空列表
list()
myl3 = list()
myl4 = list(range(5))
myl5 = list('gaoqisxt')
range()

range(start,end,step) #前包后不包,从0开始
start 参数:可选,表示起始数字。默认是 0
end 参数:必选,表示结尾数字。
step 参数:可选,表示步长,默认为 1

l1 = list(range(3,15,2))
print(l1)
l2 = list(range(3,-10,-1))
print(l2)
推导式生成列表

使用列表推导式可以非常方便的创建列表,在开发中经常使用

a = [x*2 for x in range(5)]
a = [x*2 for x in range(100) if x%9==0]

列表的增加

append()

Using the append() method to append an item:
时间复杂度O(1),就地操作,在原列表上改

thislist = ["apple", "banana", "cherry"]
thislist.append("orange")
print(thislist)
+

连接两种列表的方式,生成一个新的列表,会占新的内存(要注意空间复杂度)

a = [20,40]
a = a + [50]
print(a)
extend()

将可迭代对象追加进来
就地操作,在原列表上改

list1 = ["a", "b" , "c"]
list2 = [1, 2, 3]

list1.extend(list2)
print(list1)
insert()
thislist = ["apple", "banana", "cherry"]
thislist.insert(1, "orange")
print(thislist)
#右边插入
thislist.insert(100,'add')
thislist
#超越下界,头部追加```

#### 乘法扩展
产生新列表 将列表里的元素拿出来,重复多次
比较复杂的列表的情况,要慎用,它相当于浅层拷贝
```python
list1 = ["a", "b" , "c"]
list2 = [1, 2, 3]
list3 = list2 * 3
list3

列表的删除

del

删除列表指定位置的元素

a = [100,200,300,400]
del a[1]
a
pop
  • 不指定索引index,就从尾部弹出一个元素
  • 指定索引index,就从索引处弹出一个元素,索引超界抛出indexError错误
  • 采用索引查找,查找效率O(1),但是依旧需要移动
thislist = ["apple", "banana", "cherry"]
thislist.pop()
print(thislist)```

```python
thislist = ["apple", "banana", "cherry"]
thislist.pop(1)
print(thislist)
remove()

从左到右查找第一个匹配value的值,移除该元素,返回None,就地修改
需要遍历,效率较低O(n)

thislist = ["apple", "banana", "cherry"]
thislist.remove("banana")
print(thislist)

访问和计数

访问
索引访问
myl6 = list(range(1,16))
print(myl6)
myl6[0],myl6[1]
myl6 = list(range(1,16))
print(myl6)
print(myl6[-1],myl6[-5])
myl6[-1] = myl6[-1]+10 #赋值
myl6
thislist = ["apple", "banana", "cherry", "orange", "kiwi", "melon", "mango"]
print(thislist[2:5])
index()

返回列表内该元素首次出现的位置
遍历了一遍实现功能,是比较低效的方式,时间复杂度O(n)

fruits = [4, 55, 64, 32, 16, 32]
x = fruits.index(32)
print(x)
count()

返回指定值在列表中出现的次数
遍历了一遍实现功能,是比较低效的方式,时间复杂度O(n),随着列表数据规模的增大,效率下降

fruits = ['apple', 'banana', 'cherry']
x = fruits.count("cherry")
print(x)
len()

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

成员资格判断

判断列表中是否存在指定的元素,我们可以使用 count()方法,返回 0 则表示不存在,返回
大于 0 则表示存在。但是,一般我们会使用更加简洁的 in 关键字来判断,直接返回 True
或 False。

a = [10,20,30,40,50,20,30,20,30]
print(20 in a)
print(100 in a )
print(30 not in a )

列表切片

切片 slice 操作可以让我们快速提取子列表或修改。标准格式为:
[起始偏移量 start:终止偏移量 end[:步长 step]]

在这里插入图片描述
在这里插入图片描述
切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。起始
偏移量小于 0 则会当做 0,终止偏移量大于“长度-1”会被当成”长度-1”

列表复制

list1 = [30,40,50]
list2 = list1
#只是将 list2 也指向了列表对象,也就是说 list2 和 list2 持有地址值是相同的,列表对象本
#身的元素并没有复制。
list1 = [30,40,50]
list2 = [] + list1
#新列表

列表遍历

a = [1,2,5,4,654,8,4]
for i in a:
	print(i)

排序

修改原列表,不新建新列表的排序

a = [20,10,30,40]
a.sort()
a = [20,10,30,40]
a.sort(reverse = True)

建新列表的排序

a = [20,10,30,40]
a = sorted(a)
a = [20,10,30,40]
c = sorted(a,reverse=True)

reversed()返回迭代器

内置函数 reversed()也支持进行逆序排列,与列表对象 reverse()方法不同的是,内置函数
reversed()不对原列表做任何修改,只是返回一个逆序排列的迭代器对象。

a = [20,10,30,40]
c = reversed(a)
print(c)
list(c)

相关内置函数

max min

用于返回列表中最大和最小值。

a = [40, 30, 20, 10]
print(max(a))
print(min(a))

sum

对数值型列表的所有元素进行求和操作,对非数值型列表运算则会报错。

a = [40, 30, 20, 10]
print(sum(a))

多维列表

二维列表

在这里插入图片描述

a = [
	[1,2,3]
	[3,4,5]
	[6,7,8]
]
print(a)
print(a[0])
print(a[0][0]
a = [
["高小一",18,30000,"北京"],
["高小二",19,20000,"上海"],
["高小一",20,10000,"深圳"],
]
for m in range(3):
for n in range(4):
print(a[m][n],end="\t")
print() #打印完一行,换行

元组 tuple

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

元组的创建

a = 10,20,30
t1 = ()
t2 = tuple()
t3 = (1,) # t3 = (1) 则错误,创建的是一个数字
isinstance(t3,tuple)

元组的元素访问和计数

元组元素不能修改

a = (20,10,30,9,8)
a[3] = 1 #wrong

元组的元素访问和列表一样

a = (20,10,30,9,8)
a[1]

zip

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

a = [10,20,30]
b = [40,50,60]
c = [70,80,90]
d = zip(a,b,c)
list(d)

生成器推导式创建元组

我们可以通过生成器对象,转化成列表或者元组。也可以使用生成器对象的__next__()
方法进行遍历,或者直接作为迭代器对象来使用。不管什么方式使用,元素访问结束后,如
果需要重新访问其中的元素,必须重新创建该生成器对象。

s = (x*2 for x in range(5))
print(s)
l1 = list(s)
print(l1)
t1 = tuple(s)
print(l1)#只能访问一次,第二次就空了,得重新生成
s = (x*2 for x in range(5))
print(s.__next__())
print(s.__next__())

元组总结

  1. 元组的核心特点是:不可变序列。
  2. 元组的访问和处理速度比列表快。
  3. 与整数和字符串一样,元组可以作为字典的键,列表则永远不能作为字典的键使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值