day06-日常笔记(列表)

列表

1.什么是列表(list)

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

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

2.列表的字面量

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

例如:

[1, 2, 3]
[10, 'abc', True]
num = 100;  [num, 200]
[]  -- 空列表

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

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

例如:

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.获取部分元素(切片) - 结果是列表
    列表[开始下标:结束下标:步长]

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

    例如:

    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::-1])     # ['肖生克的救赎', '功夫熊猫', '毒液']
    print(moves[::-1])      # 列表中的元素倒序
    
  • c.一个一个的取出所有元素(遍历)

    • 可以使用for循环直接遍历列表拿到每个元素; (操作元素的时候和下标无关)
    # 直接遍历
    for item in moves:
        print(item)
    
    • 可以通过遍历列表元素对应的下标来遍历列表元素; (操作元素的时候和下标有关)
    # 通过遍历下标遍历
    for index in range(len(moves)):
        print('下标:',index)
        print(moves[index])
    

练习:统计一个班的学生的成绩,存到一个列表中。求整个班的学生的平均成绩.
[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))

列表的操作

1.增(添加列表元素)

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

  • b.insert
    列表.insert(下标, 元素) - 在指定的下标前插入指定的元素(注意:这个操作不会产生新的列表)

例如:

animes = ['海贼王', '火影忍者', '一人之下', '海贼王', '秦时明月', '画江湖']

animes.append('一拳超人')
print(animes)

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

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

2.删(删除元素)

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

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

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

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

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

1.del

del animes[-2]
print(animes)

# del animes[100]  # IndexError: list assignment index out of range

2.remove

animes.remove('海贼王')
print(animes)

# animes.remove('死神')  ValueError: list.remove(x): x not in list

3.pop

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

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

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

坑一: 遍历列表删除部分元素,删不全! --- 遍历的时候对原列表切片
解决方法:遍历新的列表切片,用remove移除原列表的元素

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)

将小于18岁的拎出来,存到一个新的列表中

坑二: 通过下标遍历列表,删除元素的时候,下标越界和元素获取不全
解决办法:下标对应的元素需要删除,下标值不动;不会删除下标加1

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)

3.改(修改元素的值)

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

例如:

list1 = [1, 2, 3]
list1[0] = 'abc'
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, count)

4.相关运算:

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

  • b.支持比较运算
    比较大小的原理和字符串类似

    例如:

    list1 = [1, 2, 3]
    list2 = ['a', 'b', 'c']
    print(list1 + list2, list1)
    print(list1*2)
    
    print([1, 2, 3] == [2, 1, 3])   # False
    print([1, 2, 3] == [1, 2, 3])   # True
    print([1, 2, 3, 4] > [2, 3])    # False
    print([10, 20, 2] > [10, 3])    # True
    

5. 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

6. len

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

例如:

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

7. list

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

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

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

8.序列其他方法

  1. max(序列) - 获取序列中值最大的元素
  2. min(序列) - 获取序列中值最小的元素
  3. 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)))


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

# extend()用一个列表扩充另一个列表
list1.extend(['abc', 100])
print(list1)

# extend()用一个字符串扩充另一个列表(把字符串当成字符数组来扩充)
list1.extend('abc')
print(list1)

# index()获取元素下标
list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
print(list1.index(100))

# reverse()使原列表翻转
list1.reverse()
print(list1)

# sort()使原列表排序
list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
list1.sort()
print(list1)

# sort()使原列表反序排序
list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
list1.sort(reverse=True)
print(list1)

list1.clear()
print(list1)

list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
list2 = list1.copy()
list3 = list1[:]
print(list2, list3)
print(id(list1), id(list2), id(list3))
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容

  • 一、快捷键 ctr+b 执行ctr+/ 单行注释ctr+c ...
    o_8319阅读 5,803评论 2 16
  • """1.分之结构ifif-elseif-elif-else if 条件:代码段 if 条件:代码段1else:代...
    LittleBear_6c91阅读 420评论 0 0
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,753评论 0 8
  • 2015年8月23日 天气一直下雨☔️ 早上睡到自然醒,没有闹钟果然睡眠质量棒棒的。下雨天人都变的特别懒,好像躺在...
    橘子桔子阅读 221评论 0 1
  • 为什么那么多人总是默默无闻一生,可悲过完一生,你知道这是什么原因么?不是他们缺乏野心,也不是他们没有成功的欲望,核...
    爱读书的陕北大叔阅读 2,866评论 3 31