Ygon's Day06_列表

1. 列表

1.1. 列表介绍

  1. 什么时候用列表:需要用一个变量去同时保存多个数据
  2. 列表:列表是python内置的容器型数据类型(序列),可变(支持增删改)并且有序(支持下标操作)
    用中括号将多个元素括起来,多个元素之间用逗号隔开:[元素1,元素2,蒜素3....]
  3. 列表中的元素:python内置的数据类型对应的数据,或者程序员自定义类型的数据都可以。
    注意:赋值预算表达式不能作为列表元素!
    list = [120,12.9,True,'abc',[1,2,3]]

1.2获取元素(和字符串一样)

1.2.1获取单个元素

获取单个元素(和字符串一样): 列表[下标]

names = ['海贼王', '火影忍者', '死神', '犬夜叉', '妖精的尾巴', '熊出没', '一人之下']
# print(names[100])   # IndexError: list index out of range(下标越界)
print(names[-2])

1.2.2获取部分元素(切片)

获取部分元素-切片(和字符串一样): 列表[开始下标:结束下标:步长]
切片的返回值是个列表

print(names[1:4])    # ['火影忍者', '死神', '犬夜叉']
print(names[1:4:-1])     # []
print(names[::-1])    # ['一人之下', '熊出没', '妖精的尾巴', '犬夜叉', '死神', '火影忍者', '海贼王']
print(names[:])       # ['海贼王', '火影忍者', '死神', '犬夜叉', '妖精的尾巴', '熊出没', '一人之下']
print(names[::2])     # ['海贼王', '死神', '妖精的尾巴', '一人之下']

1.2.3 遍历

a.直接遍历
for 变量 in 列表: # 变量取到的是元素
循环体

b.通过下标遍历
for 变量 in range(len(列表)): # 变量取到的是下标
循环体

for item in names:
    print(item)

for index in range(0, len(names), 2):
    print(index, names[index])
练习: 将班级学生的成绩保存到scores中,求班级的平均成绩,和不及格人数
scores = [90, 80, 70, 100, 76, 57, 54]
sum1 = 0
count = 0
for score in scores:
    sum1 += score
    if score < 60:
        count += 1
print('平均分是:%.1f 不及格人数:%d' % (sum1/len(scores), count))

补充: 求和函数sum

sum(序列) - 求序列中所有元素的和;序列要求元素类型一致,并且元素支持求和运算
print(sum(scores), sum(range(101)))
sum()求和函数
sum(序列) -求序列中所有元素的和;序列要求元素类型必须是数字类型。

1.3 列表的增删改

  1. 增: -列表.append(元素),在指定的列表最后添加指定元素
persons = ['路飞', '宝儿姐', '张楚楠']
persons.append('容嬷嬷')
print(persons)
persons.append('赵云')
print(persons)

插入: -insert(下标,元素),在指定列表的指定位置插入元素

numbers = [1, 20, 34, 50]
numbers.insert(2, 22)
print(numbers)
numbers.insert(0, 1000)
print(numbers)
练习: 输入一个数字,将它添加到一个有序列表中,要求添加进去后不改变从小到大或者从大到小排列的顺序[1, 20, 100, 200] 输入: 50 [1, 20, 50,100, 200]; 输入:0 [0, 1, 20, 100, 200], 输入: 500 [1, 20, 100, 200, 500]
numbers = [1, 20, 100, 200]
num = int(input('请输入一个数字:'))
思路: 找到第一个比输入的数字大的数字对应的下标,然后插入到这个下标前。如果原来的数字都比输入的小,就添加到最后
for index in range(len(numbers)):
    if numbers[index] > num:
        numbers.insert(index, num)
        break
else:
    numbers.append(num)

print(numbers)
  1. 删:-del 列表[下标];
    列表.remove(元素),将指定列表中第一个指定元素删除。
names = ['海贼王', '火影忍者', '死神', '犬夜叉', '妖精的尾巴', '熊出没', '一人之下', '海贼王']
del names[2]
print(names)
names.remove('海贼王')
print(names)

列表.pop(下标),删除列表指定位置的元素,返回被移除的元素

names = ['海贼王', '火影忍者', '死神', '犬夜叉', '妖精的尾巴', '熊出没', '一人之下', '海贼王']
del_name = names.pop()
print(names, del_name)

del_name = names.pop(1)
print(names, del_name)

清空:列表.clear() -清空列表所有元素
names.clear()
print(names)

  1. 改: 列表[下标]=新值 -将列表中指定下标对应的元素改成新值
nums = [1, 2, 3]
nums[0] = 100
print(nums)
  1. in / not in
    元素 in 列表 -- 判断列表中是否包含指定的元素
print([1, 2] in [1, 2, 3, 4, [1, 2]])   # True
print([1, 2] in [1, 2, 3, 4])   # False
print(1 in [[1], 2, 3])   # False
print(1 in [1, 2, 3])    # True

1.4 列表的相关运算

1.4.1 数学运算: +, *

列表1+列表2 - 将两个列表中的元素合并产生一个新的列表(原列表不会发生改变)
列表*N - 列表中的元素重复N次产生新的列表

list1 = [1, 2, 3]
list2 = ['name', 'age']
new_list = list1 + list2
print(new_list, list1, list2)
print(list1*3)
list3 = [1]*100
print(list3)

1.4.2 比较运算: ==, !=

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

注意:>, <, >=, <= 只支持相同位置上元素类型相同的两个列表

例如: print([1, 2, 3] > ['a', 'b']) #TypeError: '>' not supported between instances of 'int' and 'str'

1.5 内置函数

len(列表)、sum(列表) - 要求列表中的元素必须是数字、max(列表)、min(列表)
list(数据) - 将指定数据转换成列表, 所有的序列都可以转换成列表,比如: 字符串,列表、字典、集合、元祖、range、迭代器、生成器等 - 转换的时候是将序列中的元素作为列表元素

print(list('abcd'))
print(list(range(5)))
print(list(str(123)))

nums = ['10', '23', '4']   # 10234
print(''.join(nums))

1.6. 相关方法

  • 列表.count(元素) - 获取指定元素在列表中出现的次数, 结果是整数
  • 列表.extend(序列) - 将序列中的元素添加到列表中, 结果None(返回值为空)
list1=[]
list1.extend('abc')
print(list1)
#运行结果:['a', 'b', 'c']
  • 列表.index(元素) - 获取指定元素在列表中的下标,如果这个元素有多个只获取第一个,如果元素不存在会报错
list2 = [1, 0, 1, 2, '张飞', '关羽', '赵云', '吕布']
print(list2.index('张飞'))
#运行结果:4
print(list2.index('诸葛亮'))    # ValueError: '诸葛亮' is not in list
  • 列表.reverse() - 将列表中的元素倒序, 没有返回值(None)。
    list2.reverse()
    print(list2)
list1=[1,2,3,4,5]
list1.reverse()
print(list1)                     #[5,4,3,2,1]

补充: 内置函数: reversed(序列) - 将序列中的元素倒序产生一个新的迭代器, 原序列不会修改


list1 = [1, 2, 3]
result = reversed('abc')
# for item in result:
#     print(item)
print(list(result))
print(list1)
  • 列表.sort() - 对列表中的元素从小到大排序(列表中的元素类型一致并且支持比较运算), 不会产生新的列表
list1 = [1, 5,2,7, 3,4]
list1.sort()
print(list1)      #[1, 2, 3, 4, 5, 7]
#补充:列表.sort(reverse=True)   -  从大到小排序
list1.sort(reverse=True)
print(list1)      #[7, 5, 4, 3, 2, 1]
  • 列表.copy() - 产生一个新的列表,列表中的元素和原列表一样,相当于: 列表[:]
list1 = [1, 2, 3]
list2 = list1
list3 = list1.copy()           #list2与list3的区别在于:list2与list1完全相等,地址也相同,list3虽然copy了list1的元素值,但是地址不同,内存重新开辟空间存储list3。
print(list2, list3)          #[1, 2, 3]    [1, 2, 3]
list1.append(10)
print (list2,list3)          #[1, 2, 3, 10] [1, 2, 3]
# 补充:  id(变量) - 查看变量中实质存储的地址
# python所有变量实质都是直接保存的数据在内存中的地址
print(id(list1), id(list2), id(list3))    #11093456 11093456 11094616

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

推荐阅读更多精彩内容