美文网首页1~10
06 list列表和相关运算

06 list列表和相关运算

作者: 贺夕 | 来源:发表于2019-01-02 20:56 被阅读0次

====== list列表 ======

1. 什么是列表(list)

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

可变 —— 列表中的每个元素的 值 可变;列表中的 长度 可变;列表中元素的 顺序 可变(支持 增 删 改)

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

2. 列表的字面量:通过[]括起来,里面有多个元素,每个元素用逗号隔开

[1,2,3]     # 1为一个元素
[10, 'abc', True]  # 'abc'为一个元素
num = 100; [num, 200]  # nun为一个元素

[] —— 空列表

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

scores = [10, 20,30,40]
print(scores)   # [10, 20, 30, 40]

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

list1 = [11, 10.22, 'abc', True, [1, 2, 3], {'a' : 10}, lambda x : 2*x]  # 总共7个元素,长度为7
print(len(list1))  # 取其长度

list2 = [
    10,
    11.434,
    'hello',
    {'name' : '小明'}
]

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

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

a. 获取单个元素

列表[下标] —— 获取列表中指定下标对应的元素

list1 = [10, 20, 30, 'abc']
print(list1[0], list1[-1])  # 10 abc  获取第一个元素,和最后一个元素

b. 获取部分元素(切片) —— 结果是列表 # 无论是否切到

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

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

moves = ['豆豆', '花花', '蓝蓝', '红红', '白白']
print(moves[1 : 3])     # ['花花', '蓝蓝']
print(moves[1 : 5 :2])  # ['花花', '红红']
print(moves[3 : -3 : -1])  # ['红红']
print(moves[3 : -3 : 1])   # []
print(moves[ : 2])      # ['豆豆', '花花']
print(moves[2 : ])      # ['蓝蓝', '红红', '白白']
print(moves[2 : : -1])  # ['蓝蓝', '花花', '豆豆']
print(moves[ : : -1])   # ['白白', '红红', '蓝蓝', '花花', '豆豆']

c. 一个一个的取出所有元素(遍历)

可以使用for循环直接遍历列表拿到每个元素(操作元素的时候和下标 无关 )

可以通过遍历列表元素对应的下标来遍历列表元素(操作元素的时候和下标 有关 )

# 直接遍历
for item in moves :
    print(item)
# 豆豆
# 花花
# 蓝蓝
# 红红
# 白白

# 通过遍历下标遍历
for index in range(len(moves)) :
    print('下标', index)
    print(moves[index])
# 下标 0
# 豆豆
# 下标 1
# 花花
# 下标 2
# 蓝蓝
# 下标 3
# 红红
# 下标 4
# 白白
练习:统计一个班的学生成绩,存到一个列表里面,求整个班学生的平均成绩。
# [90, 89, 80, 70, 98, 67]
# 打印出平均成绩
scores = [90, 89, 80, 70, 98, 67]
total = 0
for score in scores :
    total += score    # 求总和

print('平均成绩', total / len(scores))  # 平均成绩 82.33333333333333

====== 增、删、改 ======

1. 增(添加列表元素)

a. .oppend

列表.oppend(元素) —— 在指定的 列表 的最后添加指定的 元素

b. .insert

列表.insert(下标,元素) —— 在指定的 下标前 插入指定的元素
animes = ['一人之下', '火隐忍者', '斗破苍穹', '尸兄']  # animes是 动漫 的意思
animes.append('七龙珠')
print(animes)   #['一人之下', '火隐忍者', '斗破苍穹', '尸兄', '七龙珠']  增加'七龙珠到'animes当中

animes.insert(2,'犬夜叉')  # 添加到下标为2(斗破苍穹)之前
print(animes)  # ['一人之下', '火隐忍者', '犬夜叉', '斗破苍穹', '尸兄', '七龙珠']

2.删(删除元素)

a. del

del 列表[下标] —— 删除列表中指定下标对应的元素
注意:del是Python中的关键字,可以用它删除任何数据,这儿的下标不能越界

b. remove

列表.remove(元素) —— 删除列表中第一个指定元素
注意:被删除的元素在列表中必须是存在的

c. .pop

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

del的使用

# del animes[-100]  # 下标不可越界,报错
del animes[-2]  # 删除下标为-2(尸兄)
print(animes)   # ['一人之下', '火隐忍者', '犬夜叉', '斗破苍穹', '七龙珠']

remove的使用

animes = ['一人之下', '火隐忍者', '一人之下', '斗破苍穹', '尸兄']  # animes是 动漫 的意思
animes.remove('一人之下')  # 删除列表中第一个指定元素'一人之下'
# animes.remove('死神')  # 被删除的元素在列表中必须是存在的,报错ValueError: list.remove(x): x not in list
print(animes)  # ['火隐忍者', '一人之下', '斗破苍穹', '尸兄']

pop的使用

del_item = animes.pop()
print(animes, del_item)  # ['火隐忍者', '一人之下', '斗破苍穹'] 尸兄

del_item = animes.pop(0)
print(animes, del_item)  # ['一人之下', '斗破苍穹'] 火隐忍者
练习:用一个列表统计一个班的学生年龄(控制台不断输入年龄值,直到输入end为止),然后删除所有小于18岁的年龄
# [12, 20, 16, 15, 23]  产生列表
# [18, 20, 23]   删除小于18岁的年龄
ages = []  # 生成一个空列表保存年龄
age = input('请输入年龄:')  # 产生年龄
while age != 'end' :
    ages.append(int(age))  # 输入一个年龄就往列表中添加一个
    age = input('请输入年龄:')  # 输入下一个年龄
# print(ages)  # [12, 13, 20, 18, 30]

★坑1:遍历列表删除部分元素,删不全! —— 遍历的时候对元列表切片
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)  # [20, 18, 30]
# 或
# 简写
ages = [12,13, 20, 18, 30]
for age in ages[ : ] :
    if age < 18 :
        ages.remove(age)
print(ages)  # [20, 18, 30]
将小于18岁的拎出来,存到新的列表中
★坑2:通过下标遍历列表,删除元素的时候,下标越界和元素获取不完整
解决办法 —— 下标对应的元素需要删除,下标值不动,不会删除下标加1
ages = [30,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, new_ages)  # [20, 18, 30] [12, 13, 10]

3. 改(修改元素的值)

列表[下标] = 新值 —— 修改列表中指定下标对应的值
list1 = [1, 2, 3]
list1[0] = 'abc'   # 1的下标为0
print(list1)  # ['abc', 2, 3]
练习:有一个列表中保存的是学生的成绩,要求将列表中成绩小于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, count)  # [90, 78, '抄十遍试卷', 77, '抄十遍试卷', 82, '抄十遍试卷'] 3

====== 列表的相关运算 ======

1.相关运算:+,*

a.数学运算

列表1+列表2 —— 将两个列表中的元素合并在一起产生一个新的列表
列表*N —— 列表中的元素重复N次,产生一个新的列表

b.支持比较运算

比较大小的原理和字符串类似
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
print(list1 + list2)  # [1, 2, 3, 'a', 'b', 'c']
print(list1 * 2)  # [1, 2, 3, 1, 2, 3]

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

# ★了解!

2. in / not in

元素 in 列表 —— 判断列表中是否存在指定的元素
print([1, 2] in [1, 2, 3])  # False
print([1, 2] in [[1, 2], 30, 'abc'])  # True
print('abc' in [10, 'abc', True])  # True

3.len

len(列表) —— 获取列表中元素的个数
print(len([[1, 'a'], 2, '100', True]))  # 4

4.list

list(数据) —— 将其它数据转换成列表;只有 序列 才可以转换成列表,转换的时候就是将序列中所有的元素转换成列表的元素

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

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

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

5.序列的其它方法

max(序列) —— 获取序列中值最大的元素

min(序列) —— 获取序列中值最小的元素

sum(序列) —— 求序列中所有元素的和

注意:以上三种方法,要求序列中的元素类型必须一致,并且这个类型支持比较运算和加法运算(一般数字序列用)
print(max([19, 89, 999, 2, 0.2]))  # 999
print(min([19, 89, 999, 2, 0.2]))  # 0.2
print(sum([19, 89, 999, 2, 0.2]))  # 1109.2
print(sum(range(101)))  # 5050
示范
list1 = [1, 2, 3, 1, 100, 20, 30, 1]
print(list1.count(1))  # 3

list1.extend(['abc', 100])
print(list1)  # [1, 2, 3, 1, 100, 20, 30, 1, 'abc', 100]

list1.extend('abc')
print(list1)  # [1, 2, 3, 1, 100, 20, 30, 1, 'abc', 100, 'a', 'b', 'c']

list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
print(list1.index(100))  # 2

list1.reverse()
print(list1)  # [1, 30, 20, 100, 1, 3, 100, 2, 1]

list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
list1.sort()
print(list1)  # [1, 1, 1, 2, 3, 20, 30, 100, 100]

list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
list1.sort(reverse=True)
print(list1)  # [100, 100, 30, 20, 3, 2, 1, 1, 1]

list1.clear()
print(list1)  # []

list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
list2 = list1.copy()
list3 = list1[:]
print(list2, list3)  # [1, 2, 100, 3, 1, 100, 20, 30, 1] [1, 2, 100, 3, 1, 100, 20, 30, 1]
print(id(list1), id(list2), id(list3))  # 34096432 34776568 34776648

相关文章

  • 06 list列表和相关运算

    ====== list列表 ====== 1. 什么是列表(list) 列表是Python提供的容器型数据类型,可...

  • 12-29 day6 list

    1.list operation 列表操作 1.相关运算:+ * 列表1 + 列表2 --将两个列表合并到一...

  • Day6 元组和数字

    一、列表的相关操作 1.列表的数学运算: +,* 加法运算 乘法运算 2.列表的比较运算: ==, != ...

  • day8-课堂总结

    1.列表(list) - 可变,有序 -[] a.获取元素 - 通过下标获取元素b.增删改c.相关运算:+,*,i...

  • 2018-06-21 python集合操作

    list的集合运算,可以先把list转化为集合,然后在用集合的运算法则 1.如下所示:俩个列表a,b 2. 将列表...

  • Python list方法使用详解

    Python列表(list)的相关操作及方法 一、list列表 1.概述: 本质:list列表的本质是一种有序的集...

  • 容器类型的区别

    1.列表,字典,元祖,集合之间的区别 1.列表的相关功能和方法:列表(list), 符号[ ]: 可变,有序,元素...

  • python3特殊语法

    三元运算符 格式: a = 值1 if 条件 else 值2 列表生成式(由列表生成列表) List Compre...

  • Python基本语法——列表、元组、字典、字符串

    一、列表(List) List(列表) 是 Python 中最通用的序列。列表是一个任意类型对象位置的相关有序集合...

  • Python语言基础之——列表

    1.列表相关操作 1.数学运算: + * 2.比较运算 1): ==和!=补充:is的用法is 和 == 之间的区...

网友评论

    本文标题:06 list列表和相关运算

    本文链接:https://www.haomeiwen.com/subject/otmtrqtx.html