06-列表

223 阅读9分钟

06-列表

  • 1、序列
    • 1.1、基本概念
      • 序列是Python里面最基本的一种数据结构。序列用于保存一组有序的数据,所有的数据在序列中都有一个唯一的位置(索引)并且序列中的数据会按照添加的顺序分配索引。
      • 数据结构:计算机中数据存储的方式。
    • 1.2、序列的分类
      • 可变序列:序列中的元素可以改变。例如:列表(list)、字典(dict)
      • 不可变序列:序列中的元素不能改变。例如:字符串(str)、元组(tuple)
  • 2、列表
    • 列表是Python中的一个对象
    • 列表的作用:
      • 列表中可以保存多个有序的数据。
      • 列表是用来存储对象的对象
    • 2.1、列表的使用
      • 创建列表:通过[]创建一个空的列表
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/8/30 0030 8:47
# @Author  : Oliver
# 空列表
lst=[]
print(lst,type(lst))
lst=['python','a','1',2,[1,2,3]]
print(lst)

结果显示:

[] <class 'list'>
['python', 'a', '1', 2, [1, 2, 3]]
  • 2.2、切片
    • 切片是指从现有列表中获得一个子列表
    • 通过切片来获取指定的元素
    • 语法: 列表[起始 : 结束 : 步长]
    • 通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素
    • 做切片的时候总是会返回一个新的列表,不会影响原来的列表
    • 起始位置和结束位置的索引可以不写
      • 如果省略结束位置, 则会从当前的开始位置一直截取到最后
      • 如果省略开始位置, 则会从第一个元素截取到结束的元素,但是不包括结束的元素
      • 如果开始位置和结束位置都省略, 则会从第一个元素开始截取到最后一个元素
    • 步长表示每次获取元素的间隔,默认是1(可以省略不写)
    • 步长不能是0,但可以是是负数
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/8/30 0030 8:47
# @Author  : Oliver
# 空列表
lst=[]
print(lst,type(lst))
lst=['python','a','1',2,[1,2,3]]
print(lst)
#可以通过索引获取列表当中的元素
print(lst[1])
#lenth函数可以获取列表的长度
print(len(lst))
print(lst[-1])

#切片
h=lst[2:4]
print(lst)
print(h)

#省略参数
print(lst[1:])
print(lst[:3])
print(lst[:])
s=[1,2,3,4,5,6,7,8,9,10]
print(s[1:7:3])
print(s[-1::-2])

结果显示:

[] <class 'list'>
['python', 'a', '1', 2, [1, 2, 3]]
a
5
[1, 2, 3]
['python', 'a', '1', 2, [1, 2, 3]]
['1', 2]
['a', '1', 2, [1, 2, 3]]
['python', 'a', '1']
['python', 'a', '1', 2, [1, 2, 3]]
[2, 5]
[10, 8, 6, 4, 2]
  • 3、通用操作
    • + 和 *
      • + 可以将两个列表拼接成一个列表
      • * 可以将列表重复指定的次数 (注意2个列表不能够做乘法,要和整数做乘法运算)
    • in 和 not in
      • in用来检查指定元素是否在列表当中
      • not in 用来检查指定元素是否不在列表当中
    • len() 获取列表中元素的个数
    • max() 获取列表中最大值
    • min() 获取列表中最小值
    • list.index(x[, start[, end]])
      • 第一个参数 获取指定元素在列表中的位置
      • 第二个参数 表示查找的起始位置
      • 第三个参数 表示查找的结束位置
    • list.count(x) 统计指定元素在列表中出现的个数
# 两个列表拼接成为一个列表
lst=[1,2,3]+[5,6,7]
print(lst)
#可以将列表重复指定次数
lst=[1,2,3]*2
print(lst)
print(1 in lst)
print('1' in lst)
print(3 not in lst)

ttt=[1,2,44,57,99,44]
print(min(ttt))
print(max(ttt))

#index()获取指定元素在列表中的位置
print(ttt.index(44))
print(ttt.index(44,2,5))
print(ttt.count(44))
print(ttt.count('44'))

结果显示:

[1, 2, 3, 5, 6, 7]
[1, 2, 3, 1, 2, 3]
True
False
False
1
99
2
2
2
0
[1, 2, 44, 57, 99, 44]
  • 4、修改列表
    • 通过切片来修改(起始就是给切片的内容重新赋值,但是赋值的内容必须是一个序列)
    • 如果替换的元素大于原有的元素,多余的元素就依次顺延
    • 当设置了步长时,序列中元素的个数必须和切片中元素的个数保持一致
    • 通过切片来删除元素
    • del list[起始 : 结束]
    • list = []
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/8/30 0030 19:26
# @Author  : Oliver
#修改列表
hero=['a','b','c','d','v']
print('修改前',hero)
# 通过索引进行修改
hero[0]='雷神'
print('修改后',hero)
#通过del进行修改 删除元素
del hero[2]
print(hero)
#通过切片修改
#如果替换的元素大于原有的元素,多余的元素就依次顺延
hero[0:3]='pqxyz'
print(hero)
hero[0:2]=['黑豹','雷神','灭霸']
print(hero)
#向索引为0的位置插入元素
hero[0:0]=['是我啊']#相当于前面插入了一个元素
print(hero)
#通过切片来删除
hero[1:3]=[]
print(hero)
#当设置了步长时,序列中元素的个数必须和切片中元素的个数保持一致
hero[::2]=['雷神']

结果显示:

Traceback (most recent call last):
  File "C:/demo/修改列表.py", line 27, in <module>
    hero[::2]=['雷神']
ValueError: attempt to assign sequence of size 1 to extended slice of size 3
修改前 ['a', 'b', 'c', 'd', 'v']
修改后 ['雷神', 'b', 'c', 'd', 'v']
['雷神', 'b', 'd', 'v']
['p', 'q', 'x', 'y', 'z', 'v']
['黑豹', '雷神', '灭霸', 'x', 'y', 'z', 'v']
['是我啊', '黑豹', '雷神', '灭霸', 'x', 'y', 'z', 'v']
['是我啊', '灭霸', 'x', 'y', 'z', 'v']
  • 5、列表的方法
    • append() 像列表的最后添加一个元素
    • insert(arg1,arg2) 像列表指定位置插入一个元素 参数1:要插入的位置 参数2:要插入的元素
    • extend(iterable) 使用一个新的序列来扩展当前序列(它会将该序列的中元素添加到列表中) 参数需要传递一个序列
    • pop() 根据索引删除并返回指定元素
    • remove() 删除指定元素 (如果相同值的元素有多个,只会删除第一个)
    • reverse() 翻转列表
    • sort(key=None,reverse=False) 用来对列表中的元素进行排序 reverse:True反序;False 正序
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/9/1 0001 9:09
# @Author  : Oliver
a=[1,2,3,4,5,6,7]
print(a)
# append() 像列表的最后添加一个元素
a.append(8)
print(a)
# insert(arg1,arg2) 像列表指定位置插入一个元素
# 参数1:要插入的位置 参数2:要插入的元素
a.insert(1,10)
print(a)
# extend(iterable) 使用一个新的序列来扩展当前序列(它会将该序列的中元素添加到列表中) 参数需要传递一个序列
x=['a','b','c','d','e','f']
a.extend(x)
print(a)
# pop() 根据索引删除并返回指定元素
r=a.pop(1)
print(r)
print(a)
# remove() 删除指定元素 (如果相同值的元素有多个,只会删除第一个)
b=[1,1,2,2,3,4,3]
b.remove(3)
print(b)
# reverse() 翻转列表
a.reverse()
print(a)
# sort(key=None,reverse=False) 用来对列表中的元素进行排序 reverse:True反序;False 正序
c=[1,4,66,2,80,27,88,100,12]
c.sort()
print(c)

结果显示:

[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 10, 2, 3, 4, 5, 6, 7, 8]
[1, 10, 2, 3, 4, 5, 6, 7, 8, 'a', 'b', 'c', 'd', 'e', 'f']
10
[1, 2, 3, 4, 5, 6, 7, 8, 'a', 'b', 'c', 'd', 'e', 'f']
[1, 1, 2, 2, 4, 3]
['f', 'e', 'd', 'c', 'b', 'a', 8, 7, 6, 5, 4, 3, 2, 1]
[1, 2, 4, 12, 27, 66, 80, 88, 100]

Process finished with exit code 0

  • 6、遍历列
    • 6.1 for循环
      • 通过for循环来遍历列表
      语法
      for 变量 in 序列(遍历的规则):
          代码块
      
      • 注意: for循环的代码块会执行多次,序列中有几个元素就会执行几次。每执行一次就会将序列中的一个元素赋值给变量,所以我们可以通过变量来获取列表中的元素
#遍历列(for)
a=[1,2,3,4,5,6,7,8,9,10]
for i in a:
    print(i,end='')
print()

结果显示

12345678910
  • 6.2 range(start, stop[, step])
    • 参数说明
      • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
      • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
      • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
#range(start, stop[, step])
print(range(1,10))
a=list(range(1,10))
print(a)

结果显示:

range(1, 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 课程作业
    • 练习课堂中老师敲的代码
    • 现在有 a = [1,2,3,4,5,6] 不通过函数的形式实现列表的反转([6,5,4,3,2,1]) 并写出推导过程
    • 给 用户9次机会 猜1 - 10 个数字随机来猜数字。如果随机的数字和用户输入的数字一致则表示正确,如果不一致则表示错误。最终结果要求用户怎么也猜不对
    • 有两个列表 lst1 = [11, 22, 33] lst2 = [22, 33, 44]获取内容相同的元素
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/8/30 0030 21:18
# @Author  : Oliver
# 现在有 a = [1,2,3,4,5,6] 不通过函数的形式实现列表的反转([6,5,4,3,2,1]) 并写出推导过程
# 方法一思路:将第一个数和第六个数交换位置,第二个数和第五个数换位置.....
a=[1,2,3,4,5,6]
i=3
j=2
while i<6:
    t=a[i]
    a[i]=a[j]
    a[j]=t
    j-=1
    i+=1
print(a)
#方法二:
a = [1, 2, 3, 4, 5, 6]
a = a[::-1]
print(a)

#有两个列表 lst1 = [11, 22, 33] lst2 = [22, 33, 44]获取内容相同的元素
lst1 = [11, 22, 33]
lst2 = [22, 33, 44]
for i in lst1:
    for o in lst2:
        if i == o:
            print(i)

#猜数字
#给用户9次机会 猜1 - 10 个数字随机来猜数字。如果随机的数字和用户输入的数字一致则表示正确,如果不一致则表示错误。最终结果要求用户怎么也猜不对
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
i = 1
while i < 10:
    b = int(input('请输入1~10以内的一个数:'))
    print('猜测错误')
    a.remove(b)
    i += 1
print('很遗憾,最终结果为:', a[0])

结果显示:

[6, 5, 4, 3, 2, 1]
[6, 5, 4, 3, 2, 1]
22
33
请输入1~10以内的一个数:9
猜测错误
请输入1~10以内的一个数:8
猜测错误
请输入1~10以内的一个数:7
猜测错误
请输入1~10以内的一个数:6
猜测错误
请输入1~10以内的一个数:5
猜测错误
请输入1~10以内的一个数:4
猜测错误
请输入1~10以内的一个数:3
猜测错误
请输入1~10以内的一个数:2
猜测错误
请输入1~10以内的一个数:1
猜测错误
很遗憾,最终结果为: 10

Process finished with exit code 0