Day06学习总结-list列表

1.什么是列表(list)

列表是python提供的容器型数据类型。可变并且有序的

可变 - 列表中的每个元素的值可变,列表的长度可变,列表中元素的顺序可变(支持增删改)
有序 - 每个元素可以通过下标来确定位置

列表的字面量:通过[]括起来,里面有多个元素,每个元素用逗号隔开;
[1, 2, 3]
[10, 'abc', True]
num = 100; [num, 200]
[] - 空列表

注意:列表元素的类型可以是任何python支持的数据类型;并且同一个列表中不同元素的类型可以不一样
示例:

scores = [90, 89, 100, 67]
print(scores)

任何类型的数据都可以作为列表的元素
示例:

list1 = [90, 10.34, 'abc', True, [1, 2, 3], {'a': 10}, lambda x: 2*x]
print(len(list1))

list2 = [
    90,
    10.34,
    'hello',
    {'name': 'xiaoming'}
]

a = [1, 10]
list3 = [a, 20]
print(list3)

2.获取列表元素(和字符串获取字符的语法一样)

a.获取单个元素
列表[下标] - 获取列表中指定下标对应的元素
示例:

list1 = [10, 20, 30, 'abc']
print(list1[0], list1[-1])

b.获取部分元素(切片) - 结果是列表
列表[开始下标:结束下标:步长]

注意:取不到的时候,结果是空列表
示例:

movies = ['毒液', '功夫熊猫', '肖生克的救赎', '这个杀手不太冷', '拯救大兵瑞恩']
print(movies[1:3])          # ['功夫熊猫', '肖生克的救赎']
print(movies[1:5:2])        # ['功夫熊猫', '这个杀手不太冷']
print(movies[3:-3:-1])      # ['这个杀手不太冷', '肖生克的救赎']
print(movies[3:-3:1])       # []
print(movies[:2])           # ['毒液', '功夫熊猫']
print(movies[2:])           # ['肖生克的救赎', '这个杀手不太冷', '拯救大兵瑞恩']
print(movies[2::-1])        # ['肖生克的救赎', '功夫熊猫', '毒液']
print(movies[::-1])         # ['拯救大兵瑞恩', '这个杀手不太冷', '肖生克的救赎', '功夫熊猫', '毒液']

c.一个一个的取出所有元素(遍历)
可以使用for循环直接遍历列表拿到每个元素;(操作元素的时候和下标无关)
可以通过遍历列表元素对应的下标来遍历列表元素;(操作元素的时候和下标有关)
示例:

# 直接遍历
for item in movies:
    print(item)

# 通过遍历下标来遍历
for index in range(len(movies)):
    print('下标:', index)
    print(movies[index])

练习:统计一个班的学生的成绩,存到一个列表中。求整个班的学生的平均成绩。

# [90, 89, 80, 70, 98, 67]
# 打印出平均成绩

scores = [90, 89, 80, 70, 98, 67]
sum1 = 0
for item in scores:
    sum1 += item
ave = sum1 / len(scores)
print('平均成绩为%.2f' % ave)

列表的增删改

1.增(添加列表元素)

a.append
列表.append(元素) - 在指定的列表的最后添加指定的元素(注意:这个操作不会产生新的列表)
示例:

animes = ['海贼王', '火影忍者', '一人之下', '秦时明月', '画江湖']
animes.append('一拳超人')
print(animes)

b.insert
列表.insert(下标, 元素) - 在指定的下标前插入指定的元素
示例:

animes.insert(2, '犬夜叉')
print(animes)

animes.insert(0, '进击的巨人')
print(animes)

2.删(删除元素)

a.del
del 列表[下标] - 删除列表中指定下标对应的元素

注意:del是python中的关键字,可以用它删除任何数据
这儿的下标不能越界
示例:

del animes[-2]
print(animes)

b.remove
列表.remove(元素) - 删除列表中的第一个指定元素

注意:被删除的元素在列表中必须是存在的

c.pop
列表.pop() - 将列表中最后一个元素从列表中取出,会返回取出的元素
列表.pop(下标) - 将列表中指定下标对应的元素从列表中取出,会返回取出的元素

示例:

del_item = animes.pop()
print(animes)
print(del_item)

del_item = animes.pop(0)
print(animes)
print(del_item)

练习:用一个列表统计一个班的学生年龄(控制台不断输入年龄值,直到输入end为止),然后删除所有年龄小于18岁的

ages = []
while True:
    age = input('请输入学生的年龄:')
    if age == 'end':
        break
    else:
        ages.append(age)
print(ages)
for age in ages[:]:
    if age < '18':
        ages.remove(age)
print(ages)

# 空列表,保存年龄
# ages = []
# # 1.产生年龄
# age = input('年龄:')
# while age != 'end':
#     ages.append(int(age))    # 输入一个年龄就往列表中添加一个
#     age = input('年龄:')     # 输入下一个年龄

坑一:遍历列表删除部分元素,删不全!

解决办法:遍历的时候对原列表切片

"""
ages = [12, 13, 20, 18, 30]
age = 12    12 < 18:   ages.remove(12)
ages = [13, 20, 18, 30]
age = 20    20 < 18
age = 18    18 < 18
age = 30    30 < 18

"""
# ages = [12, 13, 20, 18, 30]
# temp = ages[:]
# for age in temp:
#     if age < 18:
#         ages.remove(age)
# print(ages)


# ages = [12, 13, 20, 18, 30]
# for age in ages[:]:
#     if age < 18:
#         ages.remove(age)
# print(ages)

坑二:通过下标遍历列表,删除元素的时候,下标越界和元素获取不全

解决办法:下标对应的元素需要删除,下标值不动;不会删除下标加1

# 将小于18岁的拎出来,存到一个新的列表中
"""
ages = [12, 13, 20, 18, 30, 10]
index = range(6) = 0~5
index = 0   age = 12  ages = [13, 20, 18, 30, 10]
index = 1   age = 20  ages = [13, 20, 18, 30, 10]
index = 2   age = 18
index = 3   age = 30
index = 4   age = 10  ages = [13, 20, 18, 30]
index = 5   越界!
"""
# ages = [12, 13, 20, 18, 30, 10]
# for index in range(len(ages)):
#     age = ages[index]
#     if age < 18:
#         ages.pop(index)
# print(ages)

ages = [12, 13, 20, 18, 30, 10]
new_ages = []         # 保存被删除的元素
index = 0
while index < len(ages):
    age = ages[index]
    if age < 18:
        del_item = ages.pop(index)
        new_ages.append(del_item)
    else:
        index += 1     # 不需要删除的时候下标才增加
print(ages)

3.改(修改元素的值)

列表[下标] = 新值 -- 修改列表中指定下标对应的值
示例:

list1 = [1, 2, 3]
list1[1] = 5
print(list1)

练习:有一个列表中保存的是学生的成绩,要求将列表中成绩小于60分的改成‘下一个班见’,并且统计下一个班见的学生的个数

scores = [90, 78, 50, 77, 23, 82, 45]
count = 0
for index in range(len(scores)):
    if scores[index] < 60:
        scores[index] = '下一个班见'
        count += 1
print(scores)
print(count)

列表的操作

1.相关运算: +, *

a.数学运算
列表1 + 列表2 - 将两个列表中的元素合并在一起产生一个新的列表
列表1 * N - 列表中的元素重复N次,产生一个新的列表
示例:

print([1, 2, 3] + ['a', 'b', 'c'])
print([1, 2, 3] * 3)

b.支持比较运算
示例:

# 比较大小的原理和字符串类似

print([1, 2, 3] == [1, 2, 3])    # True
print([1, 2, 3] == [2, 1, 3])    # False
print([1, 2, 3] < [2, 3, 4])     # True
print([1, 2, 3] > [1, 2])        # True

2. in / not in

元素 in 列表 - 判断列表中是否存在指定的元素
示例:

print([1, 2] in [1, 2, 3])    # False
print([1, 2] in [[1, 2], 3])  # True
print('abc' in [10, 'abc', True])  # True

3. len

len(列表) - 获取列表中元素的个数
示例:

print(len([[1, 'a'], 2, '100', True]))

4. list

list(数据) - 将其他数据转换成列表;只有序列才可以转换成列表,并且所有的序列都能转换成列表
转换的时候就是将序列中所有的元素转换成列表的元素
示例:

# list = 10    # 注意:不能使用python给我们提供的类型的名字来命名,否则会有隐患

list1 = list('hello')
print(list1)

list2 = list(range(11, 21))
print(list2)

5.序列的其他方法

max(序列) - 获取序列中值最大的元素
min(序列) - 获取序列中值最小的元素
sum(序列) - 求序列中所有元素的和

注意:以上三个方法,要求序列中的元素类型必须一致,并且这个类型支持比较运算和加法运算(一般数字序列用)
示例:

print(max([19, 89, 999, 2, 0.2]))
print(min([19, 89, 999, 2, 0.2]))
print(sum([19, 89, 999, 2, 0.2]))
print(sum(range(101)))

你可能感兴趣的:(Day06学习总结-list列表)