2024-9-29 学习人工智能Day5

        今天我们学习的主体为两个数据容器,一个是列表(list)、一个是元组(tuple)。

1.Python列表(list)

        python支持多种复合数据类型,可将不同值组合在一起。最常用的列表 ,是用方括号标注,逗号分隔的一组值。列表可以包含不同类型的元素,但一般情况下,各个元素的类型相同。

        而数据的写入就是将类型输入(" [ ] ")中,并将各个不同的数据用(" , ")隔开,需要注意的是,不同的数据必须要按该数据的书写方式进行表达,否则会出现错误。

list1 = ['openAI', 'hqyj', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
list4 = ['red', 'green', 'blue', 'yellow', 'white', 'black']

        容器之所谓容器,那就是既可以输入也可以输出,然后我们学习了如何访问列表中的值。

方法一、索引

        和字符串的索引一样,列表的索引从0开始,第二个索引是1,依次类推。

方法二、反向索引

        因为索引的值可以为复数,所以列表内也可以实现反向索引,最后一个元素的索引为-1,往前一位为-2,依次类推。 

 方法三、for循环取值

        因为for循环的结构为for 自定义变量  in 数据容器,而list正好是一种数据容器,所以可以直接使用for循环来取值,而因为默认步长为1,所以for循环实现的就是依次取值。而取到的值也只会暂时在单次循环内被赋给变量,循环结束后按照步长设置赋予其下一个数据容器中的值。

 方法四、切片索引

        此方法依旧是使用下标索引来访问列表的值,而切片的范围表达式则是[start:stop:step].

nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
print(nums[0:4])
# 此处对应的就是将nums列表中下标为0到3的数据输出。
# 需要注意的是,它的下边范围依旧遵循左闭右开原则,所以之会取到下标0、1、2、3这4个数值。


# 下面还有其他的用法,因为有step这个参数,所以通过step来是实现数据的跳跃输出
# 而start和stop也有默认值,start的默认值为0,stop的默认值为最后一位,根据这些默认值也可以实现一些
# 其他操作,例如从某处开始输出,或者在某处停止输出

# 从第二位开始(包含)截取到倒数第二位(不包含)
print (list[1:-2])

# 从下标2开始(包含2)到最后一个
print (list[2:])

# 从下标0开始到下标3结束(左闭右开)
print (list[:3])

# 但你加上步长还能够解锁更多新的用法,例如最实用的
print (list[::-1])
# 此函数通过两位默认值加步长为-1即可实现列表的反向

接下来,先我们先学习深浅拷贝的区别,简单来说,深拷贝是完全的重新创建一个与被拷贝值一模一样的数据,而浅拷贝则只是将被拷贝数据进行了引用。然后老师为我们讲解了列表内切片的拷贝类型为深拷贝,但是列表中的数据则是浅拷贝。如果不能够理解深浅拷贝可以看下面的链接里的介绍。

浅拷贝与深拷贝的区别(详解)_深拷贝和浅拷贝的区别-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/qq_37430247/article/details/110423921由于是深拷贝,所以当我们直接用索引赋予拷贝数据新的值,原数据是不会改变的。

  但是因为嵌套列表里的数值是浅拷贝过来的,所以不管是什么样的方式修改了列表中的某个元素,都会被认为是修改了引用的值,会对原列表造成影响。

接下来我们学习的是列表的更新,可以通过直接赋值新的列表、使用索引更改列表内单个数据,或者使用之后我们会学到的API方法append()。

然后是列表元素的删除,依旧是del方法进行删除,只是它可以通过下标参数的更改选择性和删除某些元素。

然后是一些简单的列表操作符,因为与之前的逻辑相符,只做简要介绍。 

Python 表达式结果描述
len([1, 2, 3])3长度
[1, 2, 3] + [4, 5, 6][1, 2, 3, 4, 5, 6]组合
['Hi!'] * 4['Hi!', 'Hi!', 'Hi!', 'Hi!']重复
3 in [1, 2, 3]True元素是否存在于列表中
for x in [1, 2, 3]: print(x)1 2 3迭代

然后是嵌套列表,其表达方式则是通过多个(" [ ] ")来表示其深度和位置。而嵌套的方式也可以直接嵌套或者通过在列表中添加用变量名表示的列表作为参数进行嵌套。

 最后是列表常用的API。

1len(list)列表元素个数
2max(list)返回列表元素最大值
3min(list)返回列表元素最小值
4list(seq)将可迭代数据转换为列表,常见的官方提供的迭代数据有:列表 、range、元组
5list.append(obj)在列表末尾添加新的对象
6list.count(obj)统计某个元素在列表中出现的次数
7list.extend(seq)在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
8list.index(obj)从列表中找出某个值第一个匹配项的索引位置
9list.insert(index, obj)将对象插入列表
10list.pop(index=-1)移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
11list.remove(obj)移除列表中某个值的第一个匹配项
12list.reverse()反向列表中元素
13list.sort( key=None, reverse=False)对原列表进行排序: x.sort(key=lambda a:abs(a-3), reverse=False)
14list.clear()清空列表
15list.copy()复制列表

其中count()方法是遍历列表并将参数与所有的遍历值进行对比计数。

# count底层的设计相当于下面代码的片段
number1 = [10,20]
n=0
count = 0
while n<len(x):
    count +=number1 in x[n:]
    n +=1

insert()非常有趣,它的第一个参数是下标值,第二个是插入的参数。如果在下标值在列表范围内,则逻辑正常,但如果超出了范围,insert()也不会报错。这就它有趣的地方,在insert()执行时,如果大于范围则将参数插在列表最后,如果小于则插在列表开头。

但是接下来的remove()、pop()在接收到过大或过小值时就会直接报错,remove()的功能主要是和删除第一个与传入参数匹配的元素,而pop()则是删除指定下标所在的内存空间内数据。

其他的API就不过多介绍。

2.Python元组(tuple)

        python的元组与列表类似,不同之处在于元组的元素不能修改,另外元组使用的是小括号( ),列表使用方括号[ ]。

        元组的创建非常简单,只需要在括号中添加元素并用逗号隔开即可。有些时候甚至可以不用括号,直接用逗号隔开即可。

         它和列表一样既能够存储相同类型的数据,也可以储存不同类型的数据。但是有一种特殊情况需要注意,就是当元组中之包含一个元素时,必须要通过()区分而且必须要在唯一的元素之后加一个逗号,否则( )会被当做运算符处理。

 而访问元组的方式也和列表的方式相似,可以通过下标访问,也可以通过切片查询。

        因为元组的特性,元组内的元素值不被允许做修改的,但是我们可以对元组进行连接组合,而组合方式和之前列表提供的( "+" )相同。

        

因为删除也是对元组进行修改,所以删除元组中的元素值是不允许的,但是我们还是能够通过del语句对整个元组进行删除操作。而由于之前我们提到了深浅拷贝,而我们知道当我们在修改拷贝数据中的列表内部值时,原列表是会受影响的,所以我们可以在元组中进行测试,看是否能够更改元组中的列表元素中的值。

结果显而易见,我们能够通过给元组内列表某个元素赋予新的值来对元组进行修改。但是需要注意的是这里的关键点是元组的不可变性只适用于元组本身,不适用于元组内部的可变对象。元组不能添加或删除元素,也不能替换元组中的元素(例如,不能将tup[0]替换为另一个列表),但元组中的可变对象(如列表)可以被修改。

接下来依旧是元组的运算符,与列表相似,也就不多讲了,可以自己进行实验。

Python 表达式结果描述
len((1, 2, 3))3计算元素个数
(1, 2, 3)+(4, 5, 6)(1, 2, 3, 4, 5, 6)连接得到一个新的元组
('Hi!',) * 4('Hi!', 'Hi!', 'Hi!', 'Hi!')复制
3 in (1, 2, 3)True元素是否存在
for x in (1, 2, 3): print (x)1 2 3迭代

今天的最后是元组的常用API。依旧是与列表类似,二者真的有大多数地方是相似的,只是二者的可变性很大的不同,列表适合存储常变量,而元组适合不变量的储存于调用。

序号方法描述
1len(tuple)返回元组中元素个数。
2max(tuple)返回元组中元素最大值。
3min(tuple)返回元组中元素最小值。
4tuple(list)将列表转换为元组

Over,今天的学习就到此为止了,今天省略了很多重复使用过的函数和方法,但是所有的功能与作用都有描述,可自行进行实践。     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值