Day5 列表和列表的相关运算

一、列表

数据类型:数字类型、字符串、列表、字典、元祖、集合、迭代器、生成器、函数

1、什么是列表(list)

相当于其他语言的数组。

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

可变 - 列表中的每个元素的值可变,列表的长度可变,列表中的顺序可变。(支持增、删、改)

有序 - 每个元素可以通过下标来确定位置

2、列表的字面量

通过[]括起来,里面有多多个元素,每个元素用逗号隔开。

例如:

# 用逗号隔开的是列表的元素
[1, 2, 3]       

# Python列表中的元素可以是任何Python支持的类型
# 并且同一个列表中不同元素的类型可以不一样
[10, 'abc', True]    

# 任何类型的数据都可以作为列表的元素
a = 10
list1 = [a, 132, 'abc', True, 10.23, [1, 2], {'a':10}]

# 空列表
[]                  
3、获取列表元素

和字符串获取字符的语法一样

a、获取单个元素
列表[下标]  # 获取列表中指定下标对应的元素

例:

list1 = [1, 2, 3, 4]
print(list1[0])     # 1
print(list1[-1])    # 4
b、获取部分元素(切片)

字符串的结果都是新的字符串,列表的结果是列表。

语法:

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

例子:

list1 = ['a', 'b', 'c', 'd', 'e']
print(list1[1:3])
print(list1[-3:3])
print(list1[:2])
print(list1[::-1])
c、一个一个的取出所有元素(遍历)

方法一:可以使用for循环直接遍历列表拿到每个元素。

操作元素的时候与下标无关用此方式。

list1 = ['a', 'b', 'c', 'd', 'e']
for item in list1:
    print(item)

方法二:通过遍历列表中列表元素的下标来遍历列表元素。

操作元素的时候和下标有关用此方式。

list1 = ['a', 'b', 'c', 'd', 'e']
for index in range(len(list1)):
    print(list1[index])

二、增删改

1、增(添加列表元素)
a、append

在指定的列表的最后添加指定的元素。

列表.append(元素)

例:

list1 = [1, 2, 3, 4, 5]
list1.append(6)
print(list1) # [1, 2, 3, 4, 5, 6]
b、insert

在指定的下标前插入指定的元素。

列表.insert(下标, 元素)

例:

list1 = [1, 2, 3, 4, 5]
list1.insert(3, 3.5)
print(list1) # [1, 2, 3, 3.5, 4, 5]
2、删
a、del

删除指定下标的元素,del是关键字,可以删除任何东西。

如果不加下标就删除整个列表。

注意:如果下标越界就会报错。

del 列表[下标]
del 列表

例:

list1 = [1, 2, 3, 4, 5]
del list1[0]
print(list1) # [2, 3, 4, 5]

注意:不管增加还是删除都是在原列表做改动,下标会重新分配。

b、remove

不是通过下标来删除,是通过元素来删,如果没有此元素程序报错。

列表.remove(元素)

例1:

list1 = [1, 2, 3, 4, 5]
list1.remove(5)
print(list1) # [1, 2, 3, 4]

例2:

list1 = [1, 2, 5, 4, 5]
list1.remove(5)
print(list1) # [1, 2, 4, 5] 

注意:remove删除元素时,有几个一样的元素,只删从左往右的第一个。

c、pop

相对于del 和 remove 来说,pop删除时,有返回值(返回的是被删除的元素);而del 和 remove没有返回值

列表.pop()
列表.pop(下标)

不带参数时,pop将列表中最后一个元素从列表中取出;

带下标时,pop将列表中指定下标对应的元素从列表中取出。

list1 = [1, 2, 3, 4, 5, 5]
num1 = list1.pop(0)
print(num1)
print(list1)

删除元素时遇到的两个坑

  • 坑一:用元素遍历

    会遇到的问题:遍历列表删除部分元素,删不全!

# 下标遍历有误
age_list = [14, 9, 33, 44]
for index in range(len(age_list)):
    age = age_list[index]
    if age < 18:
        age_list.pop(index)
print(age_list)
# 解决方案:遍历的时候段原列表切边复制
# 创建新的列表来保存年龄,来保证删除时下标变动
# 遍历没有变动的元素
# 要用remove根据元素来删除
age_list = [1, 2, 33, 44]
temp = age_list[:]
for age in temp:
    if age  < 18:
        age_list.remove(age)
print(age_list)
  • 坑二:下标遍历

    会遇到的问题:删不全,而且还会越界。

# 以下代码不能实现功能
for index in range(len(age_list)):
    age = age_list[index]
    if age < 18:
        age_list.pop(index)
print(age_list)
# 通过while循环控制循环次数,有删除时下标不变。
age_list = [14, 9, 33, 44]
index = 0
new_ages = []  #新列表接收删除的元素
while index < len(age_list):
    age = age_list[index]
    if age < 18:
        del_item = age_list.pop(index)
        new_ages.append(del_item)
    else:
        index += 1
print(age_list, new_ages)
3、改
列表[下标] = 新值

修改列表中指定下标对应的值

list1 = [1, 2, 3]
list1[0] = 'abc'
print(list1)    # ['abc', 2, 3]

例子:有一个列表保存的学生的成绩,要求低于60分的改成“下一个班见”,并且统计下人数。

count = 0
scores = [11, 22, 33, 66, 77, 88]
for index in range(len(scores)):
    if scores[index] < 60:
        count += 1
        scores[index] = '下一个班见'
print('下一个班见人数共有%d人'%count)
print(scores)

三、列表的相关运算

1、相关运算:
a、支持+,*运算
列表1 + 列表2

将两个列表中的元素合并在一起产生一个新的列表。

print([1, 2, 3] + ['a', 'b', 'c'])
# [1, 2, 3, 'a', 'b', 'c']
列表*N

将列表中的元素重复N次,产生一个新的列表

b、支持比较运算

比较大写与字符串比较大小相似。

list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(list1 == list2) # True
print(list1 == [1, 3, 2]) # False
2、in 和 not in
元素 in 列表

判断列表中是否存在指定的元素

print([1, 2] in [1, 2, 3]) # False
3、len
len(列表)

获取列表中元素的个数。

print(len([[1, 2], 2, 'a', 'agc'])) #4
4、list

只有序列才可以转换成列表,并且所有的序列都可以转换成列表

list(数据)

转换的时候就是将序列中所有的元素转换成列表的元素

list1 = list('hello')
print(list1) # ['h', 'e', 'l', 'l', 'o']

list2 = list(range(10, 20))
print(list2)    # [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

注意:不能用Python给我们提供的类型的名字来命名,否则会有隐患。

5、序列其他方法
max(序列) # 获取序列中值最大的元素
min(序列) # 获取序列中值最小的元素
sum(序列) # 求序列中所有元素的和

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

print(max([1, 2, 3, 3, 5, 5, 9]))
print(min([1, 2, 3, 3, 5, 5, 9]))
print(sum(range(101)))  # 计算1到100的和

你可能感兴趣的:(Day5 列表和列表的相关运算)