【PY从0到1】第三节 列表

# 3 列表

# 1> 下面这就是一个列表
aabbccdd = ['ee','ff','gg']
# 列表可以储存数据,包含其中元素可以有很多,是可修改、有次序的。
# 下面展示一下两套索引。
#              0     1    2
# aabbccdd = ['ee','ff','gg']
#              -3   -2   -1
# 可以用两种方式抽取列表的元素,如下。
h = aabbccdd[0]
print(h)
i = aabbccdd[-2]
print(i)
# 对应的输出结果如下
# ee
# ff
# 强调一点,索引从0开始。

# 2> 修改、添加和删除列表中的元素

# 修改可以用下列语句,通俗的讲应该叫替换。
aabbccdd[0] = 'kk'
print(aabbccdd)
# 输出结果为:['kk', 'ff', 'gg']

# 添加元素可以使用下面的方法,默认添加到列表的最后一位。
aabbccdd.append('uu')
print(aabbccdd)
# 输出结果为:['kk', 'ff', 'gg', 'uu']

# 习惯上,会先创建一个空列表。然后再用append()添加元素。

# 也可以使用方法insert()将元素插入到指定位置,具体如下。
aabbccdd.insert(1,'pp')
print(aabbccdd)
# 输出结果为:['kk', 'pp', 'ff', 'gg', 'uu']

# 如果知道元素的索引,可以直接用del 删除对应元素
del aabbccdd[0]
print(aabbccdd)
# 输出结果为:['pp', 'ff', 'gg', 'uu']

# 使用pop()删除元素,通俗讲是叫提取。默认提取最后一个元素。
popped_aabbccdd = aabbccdd.pop(1)
print(aabbccdd)
print(popped_aabbccdd)
# 输出结果为:
# ['pp', 'gg', 'uu']
# ff

# 如果知道元素名称,可以用remove()直接删除。
# remove()不具有提取功能。
# 如果列表中有重复的元素,方法remove()只删除索引较小的那一个。
# 如果列表中有重复的元素就需要用if循环解决。
aabbccdd.append('gg')
print(aabbccdd)
aaccddee = aabbccdd.remove('gg')
print(aabbccdd)
print(aaccddee)
# 对应的结果如下:
# ['pp', 'gg', 'uu', 'gg']
# ['pp', 'uu', 'gg']
# None

# 3> 列表排序
# 用方法sort()对列表进行排序,可以永久改变列表顺序。
aabbccdd.sort()
print(aabbccdd)
# 输出结果为:['gg', 'pp', 'uu']
# 传入reverse = True,可以相反顺序排序。
aabbccdd.sort(reverse = True)
print(aabbccdd)
# 输出结果为:['uu', 'pp', 'gg']
# 直接将列表传入sorted()可以临时改变列表排序,也同样适用于方法reverse,语句如下。
# print(sorted(aabbccdd,reverse = True))
# 方法reverse()可以倒着打印列表,但可以随时恢复到原来的顺序,只需要再调用这个方法即可。
aabbccdd.reverse()
print(aabbccdd)
# 对应结果如下:['gg', 'pp', 'uu']

# 4> 确定列表长度
# 使用方法len()可以确定列表长度。
print(len(aabbccdd))
# 输出结果为:3

# 5> 遍历列表
# 下面重新定义一个新的列表
abc = ['a','b','c','d','e']
for cc in abc:
    print(cc)
# 简单两行代码就可以实现遍历的功能,结果如下
# a
# b
# c
# d
# e
    
# 使用for时要注意后面有个冒号,如,for cc in abc:<----

# 6> 使用函数range()创建数值列表
# 可以使用list()和range()配合直接生成数值列表
numbers = list(range(1,10))
print(numbers)
# 注意,使用range()生成的数字是有头无尾的,所以上述代码的结果如下。
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 7> 对数字列表的简单统计
# 使用方法max()、min()、sum()对列表秋最大值,最小值和总和
print(min(numbers))
print(max(numbers))
print(sum(numbers))
# 结果如下。
# 1
# 9
# 45

# 8> 列表切片
# 切片就是说提取列表的一部分,且不改变原列表。
# 基本形式是:[起始索引:终止索引],也遵循有头无尾原则。
# 举例如下。
print(numbers[:]) #又叫复制列表
print(numbers[2:8])
print(numbers[:8])
print(numbers[:-1])
print(numbers[2:])
# 结果如下
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
# [3, 4, 5, 6, 7, 8]
# [1, 2, 3, 4, 5, 6, 7, 8]
# [1, 2, 3, 4, 5, 6, 7, 8]
# [3, 4, 5, 6, 7, 8, 9]
# 请读者自行对比这五种切片的异同。

# 9> 元组
# 他是一种特殊的列表,规则限定其中的元素无法被改变,只能被再次赋值。
# 元组是用()表达
yuanzu1 = ('s','ss','sss')
yuanzu1['s'] = 'ssss'
# 这时,Python就会报错,如下。
# TypeError: 'tuple' object does not support item assignment
# 可以看到元组里的元素确实不能被修改。
# 但是对其做赋值操作是可以的。
yuanzu1 = ('s','ss','sss')
yuanzu1 = ('ssssss')
print(yuanzu1) 
# 结果为:ssssss