4.1 列表

列表(list)

列表简介

- 列表是python中的一个对象
- 对象(object)就是内存中专门用来存储数据的一块区域
- 之前学的对象,如数值,它只能保存单一的数据
- 列表中可以保存多个有序的数据, 同一个列表里可以包含重复的数据
- 列表的使用
1、列表的创建
    my_list = []  # 创建了一个空列表
    my_list = [10] # 创建了一个只包含一个元素10的列表
    my_list = [1, 2, 3] # 创建了一个包含多个元素的列表
    my_list = [10, 'hello', True, None, [1,2,3], print] # 列表可以存储任意对象,包括函数、字符串等
    (不过,列表一般存储的是相同类型的对象)
2、操作列表中的数据
    - 列表中的对象是按插入的顺序存储到列表中
    -通过索引(index)来获取列表中的元素,从0开始
    例:
        获取第一个元素 my_list[0]
        获取第三个元素 my_list[2]
    IndexError: list index out of range
    - len()函数,获取列表的长度(为最大索引+1)
    例:len(my_list)

切片(slice)

- 切片指从现有列表中,获取一个子列表
- 一般创建列表时,变量的名字会使用复数(???我不明白)
stus = ['孙悟空', '猪八戒', '沙和尚', '唐僧', '蜘蛛精', '白骨精']
- 列表的索引可以是负数,此时则从后向前获取元素,-1表示倒数第一个,以此类推
print(stus[-2])  ---->  '蜘蛛精'

-通过切片来获取指定的元素
(1)语法: 列表[起始:结束]
  - 通过切片获取元素时,会包括起始位置的元素,但是不包括结束位置的元素
  例:stus[2:5] ---->  ['沙和尚', '唐僧', '蜘蛛精']
    - 起始和结束位置的索引均可以省略不写
    - 省略结束位置,则会截取到最后
    - 省略起始位置,则会从第一个元素截取
    - 省略起始和结束位置,则相当于创建该列表的副本---> stus[:]
(2)语法: 列表[起始:结束:步长]  (包括起始位置,不包括结束位置,步长不能为0)
    - stus[::2]  ----> ['孙悟空', '沙和尚', '蜘蛛精']

通用操作(序列通用操作,即只要是序列就可以使用这些操作)

1、操作符 + 和 *
    +可以将两个列表拼接成一个列表
        如 my_list = [1,2,3] + [4,5,6]
    *可以将列表重复指定次数
        如 my_list = [1,2,3] * 4
2、in 和 not in
    in用来检查指定元素是否存在于列表中,返回True 或 False
    如 '孙悟空' in stus   ----->   True
        '牛魔王' in stus  ----->   False
    not in 用来检查指定元素是否不在于列表中,返回True 或 False
     (与in相反)
3、len() 获取列表中元素的个数

4、min()获取列表中的最小值
   max()获取列表中的最大值
    如min([1,2,3]) ---->  1
5、两个方法(method)
    方法和函数基本上是一样的,只不过方法必须通过 对象.方法() 的形式来调用
        如 xxx.index()  方法实际上就是和对象关系紧密的函数
    (1)s.index(x) 获取指定元素x在列表s中第一次出现时的索引(注意是第一次出现)
        如 stus.index('孙悟空')  ---> 0
    完整语法:
    s.index(x[, i[, j]])    参数:x, i, j
    相当于 s[i:j].index(x)   查找元素x在位置i(包括)到位置j(不包括)之间的出现的索引
    
    (2)s.count(x)  统计元素x在列表s中出现的次数

序列(sequence)

- 序列是Python中最基本的一种数据结构(数据结构指计算机存储数据的方式)
- 序列用于保存一组有序的数据,所有的数据在序列中都有唯一的位置(索引)
    且序列中的数据会按照先后的顺序来分配索引(有序存储)
- 序列的分类
    可变序列: 序列中的元素可以改变
        > 列表(list)
    不可变序列:序列中元素不可改变
        > 字符串(str)
        > 元素(tuple)
例子:stus = ['孙悟空', '猪八戒', '沙和尚', '唐僧', '蜘蛛精', '白骨精']
1、可变序列:
    - 通过索引改变序列:
        stus[0] = 'sunwukong' 
        ---> ['sunwukong', '猪八戒', '沙和尚', '唐僧', '蜘蛛精', '白骨精']
    - 通过del删除序列中的元素:
        del stus[1]   (删除'猪八戒')
        ---> ['孙悟空', '沙和尚', '唐僧', '蜘蛛精', '白骨精']
    - 通过切片来修改序列:
    (注:给切片进行赋值时,最好使用序列)
    反例:stus[0:2] = 'swk'   ('swk'相当于序列['s', 'w', 'k'])
        ---> ['s', 'w', 'k', '唐僧', '蜘蛛精', '白骨精']
    所以规范的切片使用方式:
        stus[0:2] = ['sunwukong', 'zhubajie']
        ---> ['sunwukong', 'zhubajie', '沙和尚', '唐僧', '蜘蛛精', '白骨精']
    也可以插入利用切片修改元素的同时增加元素,如:
        stus[0:2] = ['sunwukong', 'zhubajie', '二郎神']
        ---> ['sunwukong', 'zhubajie', '二郎神', '沙和尚', '唐僧', '蜘蛛精', '白骨精'] 
        (上面这个例子指的是,用三个元素来有序替换序列的前两个元素)
    在序列最前面添加元素:
        stus[0:0] = ['牛魔王']  (向索引为0的位置插入元素)
        ---> ['牛魔王', '孙悟空', '猪八戒', '沙和尚', '唐僧', '蜘蛛精', '白骨精']
    当设置步长时,序列中元素的个数必须和切片中元素的个数一致
    
    通过切片来删除元素
        del stus[0:2]
        del stus[::2]
        del stus[0:3] ---> 相当于 stus[0:3] = []
    
    !!!(以上操作只对可变序列list生效,不可变序列无法通过索引来修改)
    若要修改,则可通过list()函数将其他序列转化为list序列(此时序列类型则变为list可变序列)

列表的方法(以下方法只能对可变序列起作用)

例子:stus = ['孙悟空', '猪八戒', '沙和尚']
1、s.append(x)    ---> 向列表s的最后添加一个元x素, 相当于s[len(s):len(s)] = [x]
    stus.append('唐僧')  ---> ['孙悟空', '猪八戒', '沙和尚', '唐僧']
    (在列表最前面添加一个元素:stus[0:0] = ['唐僧'])
2、s.extend(t) or s += t  ---> 将序列t添加到指定序列s中,相当于s[len(s):len(s)] = t
    (与append区别:extend可以同时添加多个元素)
    例: stus.extend(['mai','liang','shi'])
        --->  ['孙悟空', '猪八戒', '沙和尚','mai','liang','shi']
3、s.insert(i, x)    ---> 在序列s的索引i位置插入元素x,相当于s[i:i] = [x]
    即在原先的第i-1和第i位之间插入一个元素,作为改变后的第i位
    例: stus.insert(1, '唐僧') ---> ['孙悟空', '唐僧', '猪八戒', '沙和尚']
4、s.clear()  ---> 清空序列
    例: stus.clear()  ---> []
5、s.pop(i)  ---> 根据索引删除索引为i的元素且返回该元素
    stus.pop(i)  ---> '猪八戒'  (返回被删除的元素)
    缺省为最后一个元素,如 stus.pop() ---> '沙和尚'  (返回被删除的元素)
6、s.remove(x) ---> 删除指定值的元x素(有多个相同值的元素,则只会删除第一个元素)
7、s.reverse() ---> 将序列中的元素颠倒顺序
    注意,该函数无返回值,因此:
        result = stus.reverse()  
        print(result) ---> None
8、s.sort()  ---> 用于对列表的元素进行排序,默认是升序排列
    降序排列: s.sort(reverse=True) 加入参数reverse=True 表示降序排列

遍历列表

例子:stus = ['孙悟空', '猪八戒', '沙和尚', '唐僧']
法一:(此方法常用)
    for s in stus:
        print(s)
    (注:每执行一次就会将序列中的一个元素赋值给变量s)    
法二:(稍麻烦)
    for i in range(len(stus)):
        print(stus[i])

法三:(一般不用此方法)
    i = 0
    while i < len(stus):
        print(stus[i])
        i += 1
        
以上方法也适用于一维的numpy数据,但是对于多维numpy数据,则需要使用函数:
np.nditer(numpy_ndarray)

enumerate()

迭代时获取索引:
lst = ['a', 'b', 'c']
for index, string in enumerate(lst):
    print(index, string)
---> 0 'a'
     1 'b'
     2 'c'

range()函数

range()是一个用来生成一个自然数序列的函数
r = range(5) ---> 生成这样的序列[0,1,2,3,4]
r = range(1, 9, 2) ---> 起始1(包括1), 结束9(不包括9), 步长2
该函数需要三个参数:
    1、起始位置(可以省略,默认是0,包括起始位置)
    2、结束位置(不可省略,不包括结束位置)
    3、步长(可以省略,默认是1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值