一、学习python数据类型-列表
1、列表
- 定义:[ ]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素。
- 再回顾下列表的特点:
1、可存放多个值;
2、按照从左到右的顺序定义列表元素,下标从0开始顺序访问,有序;
3、可修改指定索引位置对应的值,可变。
1.1、列表的增加操作
1.1.1、追加,数据会追加到尾部,使用 list.append()方法,用法如下:
In [80]: students = [] # 定义一个列表
In [81]: students =["xiaohua","jack",1,2,3,"Jhon","xiaohua","haha","kaka","lala"]
In [84]: students.append("gg") # 在这个列表的最后追加“gg”
In [85]: students # 再次查看这个列表里面的值
Out[85]: ['xiaohua', 'jack', 1, 2, 3, 'Jhon', 'xiaohua', 'haha', 'kaka', 'lala', 'gg']
❗️⚠️❗️给大家普及一个小技巧,如果不知道一个方法的用法,我们可以使用help来了解它的用法,下面是一个简单的🌰
In [89]: help(students.append) # students是自己定义的列表名称,写出此命令,输入回车,会出现下面的提示
Help on built-in function append:
append(...) method of builtins.list instance
L.append(object) -> None -- append object to end
1.1.2、插入,在任意位置插入元素,代码示例如下:
In [88]: students # 先查看原来的列表元素
Out[88]: ['xiaohua','jack', 1, 2, 3, 'Jhon','xiaohua','haha','kaka','lala','gg','ff']
In [92]: students.insert(1,"oo") # 进行插入操作,这条命令是在下标为1的位置插入“oo”
In [94]: students # 插入后查看原列表的结果
Out[94]: ['xiaohua', 'oo', 'jack', 1, 2, 3, 'Jhon', 'xiaohua', 'haha', 'kaka','lala', 'gg', 'ff']
如果你插入的下标不存在那会发生什么呢?来一起看看一下的代码:
结论: 如果插入的下标不存在,那么就会自动插入到末尾
In [108]: students # 查看先有的列表的元素
Out[108]: ['xiaohua', 'oo', 'jack', 1, 2, 3, 'Jhon', 'xiaohua', 'haha', 'kaka', 'lala', 'gg', 'ff',10]
# 可以看到这个列表中共有14个元素,那么它最大的下标为13,因为列表是从0开始计数的码
In [108]: students.insert(20,"vv") # 对现有列表进行插入操作,插入到下标为20的位置
Out[108]: ['xiaohua', 'oo', 'jack', 1, 2, 3, 'Jhon', 'xiaohua', 'haha', 'kaka', 'lala', 'gg', 'ff', 10, 'vv']
# 可以看到,如果插入的下标不存在,那么就会自动插入到末尾
1.1.3、合并,可以把另一外列表的值合并进来,通过一下代码来了解一下~
In [114]: students1 = [1,2,3] # 定义列表students1,并初始化
In [115]: students2 = ["hh","kk","ll"] # 定义列表students2,并初始化
In [117]: students1.extend(students2) # 将2合并到1中
In [118]: students1 # 查看结果可见2的元素排列在1的后面
Out[118]: [1, 2, 3, 'hh', 'kk', 'll']
In [121]: id(students2) # 查看一下2的内存地址
Out[121]: 4484269960
In [122]: students2.extend(students1) # 在将1合并到2的后面
In [123]: students2 # 查看结果可见1的元素排列在2的后面
Out[123]: ['hh', 'kk', 'll', 1, 2, 3, 'hh', 'kk', 'll']
In [124]: id(students2) # 在查看一下2的内存地址,会发现内存地址没有变化,说明这个列表的指向没有发生变化
Out[124]: 4484269960
# 可以通过help查看这个方法的含义,如下:
Help on built-in function extend:
extend(...) method of builtins.list instance
L.extend(iterable) -> None -- extend list by appending elements from the iterable
1.1.4、列表嵌套,通过一下代码来了解一下~
In [122]: students1 = [1, 2, 3, 'hh', 'kk', 'll']
In [125]: students2 = ["hh","kk","ll"]
In [126]: students1.insert(1,students2) # 还是使用insert方法,将列表2嵌套进列表1的下标为1的位置
In [127]: students1 # 查看结果如下
Out[127]: [1, ['hh', 'kk', 'll', 1, 2, 3, 'hh', 'kk', 'll'], 2, 3, 'hh', 'kk', 'll']
1.2、列表的删除操作
1.2.1、del删除,根据下标直接删除,来看以下代码:
In [1]: goods = ["衣服","盘子","帽子","眼睛","雨伞"]
In [5]: del goods[0] # 输出下标为0的元素,也就是”衣服“元素
In [6]: goods # 查看删除之后列表中的元素
Out[6]: ['盘子', '帽子', '眼睛', '雨伞']
# 那如果删除的下标不存在会发生什么呢?它会报错,来看看下面的代码
In [7]: del goods[8]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-7-044d4ad0baf1> in <module>
----> 1 del goods[8]
IndexError: list assignment index out of range
1.2.2、使用pop( )方法进行删除,操作后会返回最后一个值,如下示例:
In [9]: goods
Out[9]: ['盘子', '帽子', '眼睛', '雨伞', 'shafa']
In [11]: goods.pop() # 使用pop进行删除
Out[11]: 'shafa' # 可以看到它返回了最后一个元素
In [12]: goods # 删除最后一个后,再查看goods列表
Out[12]: ['盘子', '帽子', '眼睛', '雨伞']
In [1]: lls = ['jj', 'kk', 'hh', 'ii', 'oo', 'KK', 'ff', 'gg', 'kk', 'xx', 'oo']
In [2]: lls.pop(2) # pop还可以指定元素删除,指定下标进行删除,返回这个元素的值
Out[2]: 'hh'
In [3]: lls
Out[3]: ['jj', 'kk', 'ii', 'oo', 'KK', 'ff', 'gg', 'kk', 'xx', 'oo']
如果删除一个空列表,会发生什么呢?一起来看看吧
In [13]: good = []
In [14]: good.pop()
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-14-793e7abbb490> in <module>
----> 1 good.pop()
IndexError: pop from empty list
1.2.3、使用clear( )方法清空,来看看
In [15]: goods
Out[15]: ['盘子', '帽子', '眼睛', '雨伞']
In [16]: goods.clear()
In [17]: goods
Out[17]: []
1.3、列表的修改操作
1.3.1、修改很简单只需要通过下标修改就可以啦~
In [19]: goods = ['盘子', '帽子', '眼睛', '雨伞']
In [20]: goods
Out[20]: ['盘子', '帽子', '眼睛', '雨伞']
In [21]: goods[1] = "背包" # 修改下标为1的元素为”背包“
In [22]: goods # 再来查看一下,发现果然换掉了
Out[22]: ['盘子', '背包', '眼睛', '雨伞']
# 如果需要修改的下标不存在,会报错,如下:
In [23]: goods[10] = "笔记本"
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-23-491a33df688e> in <module>
----> 1 goods[10] = "笔记本"
IndexError: list assignment index out of range
# 如果下标为负数,如下,查看与对比后发现也是可以通过负数来修改元素的,只不过要从倒数第一为-1开始从右向左数
In [24]: goods[-3] = "笔记本"
In [25]: goods
Out[25]: ['盘子', '笔记本', '眼睛', '雨伞']
1.4、列表的查询操作
1.4.1、使用index( )法进行查操作也很简单啦,看如下代码:
In [19]: goods = ['盘子', '帽子', '眼睛', '雨伞']
In [27]: goods.index("盘子") # 查找一下盘子的位置,结果会返回
Out[27]: 0
In [28]: goods.index("hhh") # 查询一下”hhh“的位置,发现goods列表中没有这个元素,会出现报错
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-28-ce0f4ca2504c> in <module>
----> 1 goods.index("hhh")
ValueError: 'hhh' is not in list
1.4.2、使用count( )方法进行查询操作,也很easy!
In [33]: goods
Out[33]: ['盘子', '笔记本', '眼睛', '雨伞', '盘子', '盘子']
In [34]: goods.count("盘子") # 计算一下”盘子“的数量,结果为3
Out[34]: 3
1.4、切片
- 认识切片:切片就像切面包,将一个完成的面包切成几块。
- 切片的特征:切片的公式为list[start : end],遵循左闭右开的原则,即下标是start的元素可以取到,下标是end的元素不能取到。
- 切片总是从左到右的顺序
1.4.1、正数切,看看如下示例:
In [47]: lls = ['jj', 'kk', 'hh', 'ii', 'oo', 'KK', 'ff', 'gg', 'kk', 'xx', 'oo']
In [48]: lls[0:6]
Out[48]: ['jj', 'kk', 'hh', 'ii', 'oo', 'KK']
In [49]: lls[0:]
Out[49]: ['jj', 'kk', 'hh', 'ii', 'oo', 'KK', 'ff', 'gg', 'kk', 'xx', 'oo']
In [50]: lls[:9]
Out[50]: ['jj', 'kk', 'hh', 'ii', 'oo', 'KK', 'ff', 'gg', 'kk']
In [51]: lls[2:9]
Out[51]: ['hh', 'ii', 'oo', 'KK', 'ff', 'gg', 'kk']
1.4.2、倒着切,看看如下示例:
In [52]: lls[-9 :0] # 因为-9到0的方向是从右到左的,和切片的默认方向相反,因此结果为空
Out[52]: []
In [53]: lls[-8:-1]
Out[53]: ['ii', 'oo', 'KK', 'ff', 'gg', 'kk', 'xx']
In [54]: lls[-9:]
Out[54]: ['hh', 'ii', 'oo', 'KK', 'ff', 'gg', 'kk', 'xx', 'oo']
In [55]: lls[:-2]
Out[55]: ['jj', 'kk', 'hh', 'ii', 'oo', 'KK', 'ff', 'gg', 'kk']
In [56]: lls[:-1]
Out[56]: ['jj', 'kk', 'hh', 'ii', 'oo', 'KK', 'ff', 'gg', 'kk', 'xx']
1.4.2、步长, 允许跳着取值,看看如下示例:
- 含有步长的切片公式:laist[start : end : step] #step 默认是1
In [57]: lls[2:-3:1]
Out[57]: ['hh', 'ii', 'oo', 'KK', 'ff', 'gg']
In [58]: lls[2:-3:2]
Out[58]: ['hh', 'oo', 'ff']
In [59]: lls[2:-10:2]
Out[59]: []
In [60]: lls[1::2]
Out[60]: ['kk', 'ii', 'KK', 'gg', 'xx']
In [61]: lls[-2::-2]
Out[61]: ['xx', 'gg', 'KK', 'ii', 'kk']
In [62]: lls[::-2]
Out[62]: ['oo', 'kk', 'ff', 'oo', 'hh', 'jj']
In [63]: lls[::2]
Out[63]: ['jj', 'hh', 'oo', 'ff', 'kk', 'oo']
In [64]: lls[::-1]
Out[64]: ['oo', 'xx', 'kk', 'gg', 'ff', 'KK', 'oo', 'ii', 'hh', 'kk', 'jj']
In [66]: lls[-1::2]
Out[66]: ['oo']
In [67]: lls[2::-2]
Out[67]: ['hh', 'jj']
- 列表的反转,通过将步长设置为负值,可以反转列表
In [64]: lls[::-1]
Out[64]: ['oo', 'xx', 'kk', 'gg', 'ff', 'KK', 'oo', 'ii', 'hh', 'kk', 'jj']
1.5、排序 & 反转
1.5.1、排序,可以使用列表封装好的方法进行排序,如下:
In [3]: lls
Out[3]: ['jj', 'kk', 'ii', 'oo', 'KK', 'ff', 'gg', 'kk', 'xx', 'oo']
In [4]: lls.sort() # 进行排序动作
In [6]: lls # 查看排序结果
Out[6]: ['KK', 'ff', 'gg', 'ii', 'jj', 'kk', 'kk', 'oo', 'oo', 'xx']
In [8]: gids = ["2","6","1","4","0","2","6","8","12"]
In [9]: gids.sort()
In [10]: gids
Out[10]: ['0', '1', '12', '2', '2', '4', '6', '6', '8']
1.5.2、反转,同样可以使用列表封装好的reserve()方法进行排序,如下:
In [11]: gids
Out[11]: ['0', '1', '12', '2', '2', '4', '6', '6', '8']
In [12]: gids.reverse() # 使用此方法对这个列表进行反转
In [13]: gids # 查看反转后的结果
Out[13]: ['8', '6', '6', '4', '2', '2', '12', '1', '0']
1.5、循环列表
In [13]: gids
Out[13]: ['8', '6', '6', '4', '2', '2', '12', '1', '0']
In [16]: for i in gids: # 遍历
...: print(i, end="----") # 查看结果
8----6----6----4----2----2----12----1----0----
1.6、判断一个元素是否在这个列表中 & 列表求和
1.6.1、判断一个元素是不是某个列表中的元素,如下:
In [22]: gids
Out[22]: [2, 3, 4, 5, 5, 4]
In [23]: 2 in gids # 使用 in 关键字
Out[23]: True
In [24]: 10 in gids
Out[24]: False
1.6.2、在列表元素都是数字的情况下可以对列表进行求和操作,使用sum()方法进行求和,如下:
In [27]: gids
Out[27]: [2, 3, 4, 5, 5, 4, 3.14]
In [28]: sum(gids)
Out[28]: 26.14