第一章 1.4 数据类型之列表

一、什么是列表

1、列表

列表是python提供的容器型数据类型;以中括号[]作为容器标志;
里面多个元素用逗号隔开:[1,2,3,4,5,6],元素的个数就是列表的长度
列表是可变的、 有序的 ;

  • 可变性:(元素的个数,元素的值,元素的顺序)-元素支持增、删、改操作;
  • 有序性:支持下标操作

2、列表元素:

列表中的元素可以是任何类型的数据(赋值语句除外)
同一个列表中的元素的类型可以不一样
例:[123,12.4,True,'sdf',[1,4,5],(10,19),{'name':100},{1,2}]


二、列表的相关操作

1、查 ------> 获取列表中的元素

1)、获取单个元素

①:语法:
列表 [ 下标 ]

②:说明:
列表----------->可以是列表值、保存列表的变量、结果是列表的表达式
中括号[ ]------>固定写法
下标------------>列表中的每个元素都会对应一个下标,来表示元素在列表中的位置

下标范围:
 0到列表长度减一 - 从前往后以此增加,0表示第一个元素
 -1到负列表长度 - 从后往前依次递减,-1表示最后一个元素

IndexError:list index out of range - 下标越界报错

2)、获取部分元素(切片) - 切片的结果还是列表

①:语法:
列表 [ 开始下标:结束下标:步长 ]

列表[m:n:step] - 获取range(m,n,step)产生的数字序列作为下标去列表里取元素

②:其他用法:

  • 省略步长(默认步长是1):列表[开始下标:结束下标];[m:n]
  • 省略开始下标/步长:列表[:结束下标:步长];[:n:step]/列表[:结束下标][:n]
     如果步长为正,从前往后取;如果步长为负,从后往前取
  • 省略结束下标/步长:列表[开始下标::步长];[m::step]/列表[开始下标:][m:]
     从开始下标取到最后一个
  • 省略开始和结束下标:列表[::步长];[::step]/列表[:]

③:遍历列表:

  • 直接遍历:
    for 变量 in 列表:
      循环体
  • 通过下标遍历
    length = len(列表)
     for 变量 in range(length):
      元素 = 列表[变量]

例:

list = [1, 30, 69, 6, 58, 77, 106]
print(list[4]) # 58
print(list[2:5]) # [69, 6, 58]
print(list[2:5:2]) # [69, 58]
print(list[:4])
prine(list[3:])
print(list[:])

2、增 ------> 添加元素

1)、列表.append [ 元素 ] ------> 在列表的最后添加元素

2)、列表.insert [ 下标 ,元素 ] ------> 在列表指定下标位置添加元素

list = ['肖申克的救赎', '功夫', '霸王别姬', '卧虎藏龙', '天方异谭', '恐怖游轮']
print(list.append['我不是药神'])
print(list.insert[-3, '大圣归来'])

3、删 ------> 删除列表元素

1)、del列表[下标]------>删除指定下标的元素

2)、列表.remove(元素)------>删除列表中指定的元素

注:若列表中没有指定的元素,报错
   若列表中有多个相同的指定元素,删除第一个

3)、列表.pop()------>取出列表中最后一个元素

   列表.pop(下标)------>取出列表中指定下标的元素

注:pop()中,元素是被取出,并没有被删除;只是对列表来说,元素减少了,如果将pop取出的值用变量保存并打印出来,能得到该元素

num = [2, 50, 8, 9, 43]
prunt(num.pop(2)) # 8
print(num) # [2, 50, 9, 43]

练习

# 练习下面这个列表中小于60的元素
# 答案:[89, 90, 78, 60, 87]
方法一、
scores = [89, 45, 56, 20, 90, 78, 60, 23, 87, 20, 50]
for num in scores[:]: # 如果在原列表中删除,那么原列表的元素下标会不断变化,
#最后程序虽然不报错,但是结果不准确
  if num < 60:
    scores.remove(num)
print(scores)

方法二、
scores = [89, 45, 56, 20, 90, 78, 60, 23, 87, 20, 50]
scores2 = scores[:]
length = len(scores2)
t = 0
for x in range(length):
  if scores2[x] < 60:
    scores.remove(scores[x])
  else:
    t += 1
print(scores)

4、改------>修改列表中的元素

列表[下标] = 值------>修改列表中指定的元素

练习:将下列表中小于60的分数换成不及格
scores = [89, 45, 56, 20, 90, 78, 60, 23, 87, 20, 50]
length = len(scores)
for x in range(length):
    if scores[x] < 60:
        scores[x] = '不及格'
print(scores)


三、列表运算

1、数学运算

1)、加法

  • 新列表中的元素是两个列表中元素的合并
    2)、乘法
  • 列表中的元素重复N次,产生一个新的列表
list1 = [1, 2, 3, 4]
list2 = ['王二', '张三', '李四']
print(list1 + list2)
print(list1 * 3)

2、比较运算符

  • 等于和不等 == 、!=
    元素的内容,个数,顺序都一样才相等
  • 大于、小于 > >= < <=
    两个列表的比较:先比较第一队元素的数值大小,第一队数值的大小就是列表的大小,如果第一队数值相等或者比较不了大小,比较第二队
li1 = [1,2]
li2 = [1,2]
print(li1 == li2)
print(li1 == li2) # print(id(li1) == id(li2))

3、is / in / not in

  • is 判断两个列表的地址是否相等
  • 元素 in 列表------>判断列表中是否存在指定元素
  • 元素 not in 列表------>判断列表中是否不存在指定元素
names = ['小红', '小强', '小明']
print('小明' in names)
print('李四' in names)

4、列表相关函数

len / max / min / list / sum

1)、len(序列)------>获取序列的长度(元素的个数)

2)、max(序列)\min(序列)------>获取序列中最大值和最小值

对序列的要求:
  1.序列中所有元素的类型一致(数字看成一个类型)
  2.元素本身支持比较大小

3)、sum(数字序列)------>求序列中所有元素的和

(要求序列中的元素全是数字)

4)、list(序列)------>将其他类型的序列转换成列表;序列是容器型数据



四、列表的其他操作

1、列表.count(元素)------>统计列表中指定元素的个数

2、列表.extend(序列)------>将其他序列的元素全部添加到列表中

3、列表.index(元素)------>获取指定元素在列表中的下标

  • a.若元素不存在,报错
  • b.若元素有多个

4、列表.revers()------>将原来的列表倒序(反过来)

5、列表.clear()------>清空列表

  • 清空列表用clear函数,不直接赋值为[]。

6、列表.copy()------>复制列表中的元素,产生一个新的列表,赋值后两个相互不影响

7、列表.sort()------>将列表中的元素从小到大排序(直接修改列表中元素的顺序,不产生新列表)

  • 列表.sort(revers=True) ----- 将列表中的元素从大到小排序
  • 列表.sort(revers=True) 相当于 列表.sort() ;列表.revers()

8、sorted(序列)------>不修改原序列,排序后产生一个新的列表(从小到大)

  • sorted(序列,reverse=True) 从大到小
posted @ 2019-11-19 20:44  anjhon_木  阅读(292)  评论(0编辑  收藏  举报