变量就是一块内存空间,用来表示/存储数据
如果表示的数据较少,直接定义几个变量就行了
但是也有的时候,要表示的数据就比较多,如果只是通过定义一个变量来表示一个数据的话,这样的工作效率太低,
所以在python中提供了列表和元组,这样的机制,可以用一个变量来表示多个数据就类似于C语言中的数组,
列表和元组,大部分的功能都是差不多的!但是有一个功能是非常明显的区别:
列表是可变的:创建好了之后,随时能改
元组是不可变的:创建好了之后,改不了,要想改,只能丢弃旧的,搞个新的~
列表的创建
创建列表的第一种方式
1.直接使用字面值来创建
[ ] 就表示一个空的列表
a = [ ]
print(tpye(a))
创建列表的第二种方式
2.使用list()来创建
b = list()
print(type(b))
如上图所示,查看列表的类型是list
可以在创建列表的时候,在[ ]中指定列表的初始值
元素之间使用,英文逗号来进行分割。
a = [1,2,3,4]
在C++/Java里面要求一个数组里只能存相同类型的变量~
python里的列表则无限制,放啥类型都可以!!
可以在同一个列表中创建不同类型的变量
如上图所示,a = [1,'hello',Treu,[4,5,6]]
列表中访问下标
列表里面可以管理很多类型的元素~
通过下标访问的方式来获取到列表中的元素~~
用到一个下标访问运算符~~[ ]
python中列表中的元素是从0开始计数的。
使用下标来访问元素
使用下标来修改元素
访问列表的下标时,不应超过下标的有效范围
由于下标是从0开始计算的,
对于列表来说,下标的有效范围,从0,到长度-1
当我们下标超出有效范围的时候,尝试访问,就会出现异常
如上图所示,当列表变量[访问列表的下标] 超出列表下标的有效范围以后,就会报错
可以使用内建函数len来获取到列表的长度(元素个数),和字符串类似。
a=[1,2,3,4 ]
print(len(a))
len可以传字符串,列表,元组,字典,自定义的类,==》》动态类型
python中的下标,其实还可以写成负数
如上图所示,python中的下标,还可以写成负数,比如说-1就是倒数第一个元素。
列表中的切片操作
通过下标操作是一次取出里面第一个元素。
通过切片,则是一次取出一组连续的元素,相当于得到一个子列表。
使用[:] 的方式进行切片操作
alist = [1,2,3,4]
print(alist[1:3])
输出结果是[2,3]
切片操作中,
使用切片的时候,省略边界
a = [1,2,3,4]
省略后边界,意思是从开始位置,一直取到整个列表结束。
print(a[1:])
切片操作采用前闭后开的取值
切片操作是一个比较高效的操作,进行切片的时候,只是取出了原有列表中的一个部分,并不涉及到“数据的拷贝”
假设有一个很大的列表,进行切片,切片的范围也很大,即使如此,切片操作仍然非常高效。
切片操作,还可以指定“步长”,
切片操作,还可以指定“步长”,
关于python(列表,元组,数组)元素的遍历
把一个列表里面的每个元素,都依次的取出来,并进行某种操作
遍历往往就要搭配循环。
1.第一种遍历方式,把每一个元素都取出来,赋值给elem,但是对elem中元素的修改,对原列表中的元素,不造成影响。
for elem in 可迭代对象
如上图所示,for elem in a:
elem = elem + 10
print (a)
是将原来列表中的元素取出来赋值给elem,然后对elem中的元素进行操作,这种操作不会对列表a中的元素产生影响。
2.第二种遍历方式,利用元素的下标来访问列表中的元素,这时对元素的修改直接反映到原列表中。
当前range传入的参数是一个前闭后开的区间。
如上图所示,使用for循环遍历列表的时候,可以通过下标的方式。
for i in range (0,len(a)):
print(a[i])
在这段代码中len(a)用来计算列表a中的元素个数。但是range函数传入的参数是前闭后开的一个区间,所以range函数传入的参数是[0,5)
如上图所示,这是通过下标直接对列表中的元素进行修改,
3.对这两种遍历方式的图像解释
4.使用while循环控制下标来进行元素的遍历
如果想在遍历过程中对元素的值进行修改,就通过访问下标的方式来访问列表或者元组中的元素。
列表中新增元素的操作
可以使用append往列表末尾新增一个元素
如上图所示,这种对象.函数的操作被称为“方法”
也就是说针对某一个对象执行某一个函数操作,被称为方法
此处的append是搭配,列表对象a,来一起使用的,而不是作为一个独立的函数,
type,print,input,len这些自定义函数,--都是独立的函数
这种要搭配对象来使用的函数(function),也叫做方法(method)
在python中,对象,就可以被视为是“变量”
还可以使用insert方法,往列表的任意位置来新增元素。
如上图所示,是在a.insert(先是插入元素的下标,再是“被插入的元素”)
如上图所示,如果想插入元素的下标超过列表的长度是就会默认把元素插入到列表的最末尾。
如何在列表中查找元素
如上图所示,可以使用in来判断某个元素是否在列表中存在,
如上图所示,当使用index方法来判定当前元素在列表中的位置,返回元素在列表中的下标,
当使用index方法来调查当前元素在列表中的位置时,当前元素在列表中不存在时,就是报错。
如何在列表中删除元素
如上图所示,就是使用pop来删除列表中的最末尾的元素,同样是变量.函数这样的方法来执行列表删除最后一个元素的操作。
如上图所示,可以使用变量.列表(想要删除的元素的下标)来删除列表中的元素。
如上图所示,可以使用remove方法,这样就可以按照值来删除列表中的元素了。
a.remove(‘cc’)
列表的拼接
就是把做个列表连接到一起,变成一张更大的列表。
使用+拼接列表的时候,只是针对当前列表的内容生成了一个更大的新的列表。
原有的列表的内容是不变的!
字符串之间的拼接也是相同的,当两个字符串之间拼接的时候,原来字符串的内容也是不变的,
其中a.extend(b)是将列表b中的内容添加到列表a中,如果用c去接受这个结果的话,会显示None
None这是一个特殊的变量的值,表示“啥都没有”
extend方法,其实是没有返回值的!!
拿一个变量来接收一个没有返回值的方法的返回值。其结果会呈现出None
None非常类似于C里面的NULL,或者Java里的null
虽然说上述两副图片的输出结果没什么区别,但是这两段代码的执行过程确实不同的,
如上图所示,a+=b等价于先创建一个更大的列表(作为临时变量)来拼接a列表和b列表中的内容,最后再将拼接好的内容赋值给列表a
但是a.extend(b)则是直接把b的内容拼到了a的后面,
综上这两种方式a.extend(b)这种拼接列表内容的方式更加高效。