list

本文详细介绍了Python列表的基础知识,包括如何查看、添加、删除和修改列表元素,以及列表的数学运算、比较运算、成员运算和相关函数的使用。通过实例展示了列表的常见操作,适合初学者学习。
摘要由CSDN通过智能技术生成

总结

一、list

1、什么是列表(list)

列表是可变的(可变指的是元素的个数可变,元素的值可变,元素的顺序可变)

列表是有序的(每个元素都有一个表示元素位置的序号 - ‘下标’)

students = ['张丁也', '钟林君', '程赟', '陶皞', '刘俊']
print(students)     # ['张丁也', '钟林君', '程赟', '陶皞', '刘俊']


name = []   # []空列表,如果[]中有空格也是空列表(空列表的布尔值是false)
print(name, bool(name))     # [] False


list1 = [12, 2.3, True, 'abc', 12, [1, 2]]      # 一共6个元素
print(list1)        # [12, 2.3, True, 'abc', 12, [1, 2]]

2、查 - 获取元素

1)查单个

获取列表中某一个元素

语法:
列表[下标]  -   获取列表中指定下标对应的元素
  • 说明:
    • 列表 - 任何结果是列表的表达式,例如:具体的一个列表值、保存列表的变量
    • [] - 固定写法
    • 下标 - 又叫索引。它是元素在列表中的位置信息。
      • 取值方式1:从0,开始依次增加,其中0表示第一个元素,1表示第二个元素
      • 取值方式2:从-1,开始依次减少,其中-1表示倒数第一个元素,-2表示倒数第二个元素
names = ['yibo', 'top', 'GD', '小S']
print(names[2])     # GD
print(names[-1])    # 小S
# print(names[7])     # 报错 IndexError: list index out of range (下标不在范围内)

print([97, 85][0])    # 97
2)切片(查部分)

同时获取列表中的多个元素

原理:通过提供下标范围来获取范围内下标对应的元素

语法:
列表[开始的下标:结束下标:步长]   -   从开始下标开始,每次下标值增加步长,取到结算下标前为止
  • 注意:
    • 结束下标对应的元素一定取不到,开始下标对应的元素可以取到
    • 如果步长为正,表示从前往后取,这个时候开始下标对应的为止必须在结束下标对应的位置前,否则结果是[]
    • 如果步长为负,表示从后往后前,这个时候开始下标对应的为止必须在结束下标对应的位置后,否则结果是[]
names = ['yibo', 'top', 'GD', '小S']
print(names[0:3:1])     # ['yibo', 'top', 'GD']
print(names[1:-1:1])    # ['top', 'GD']

print(names[0:3:-1])    # [] 无效范围,无法取到值
print(names[3:0:2])     # [] 无效范围,无法取到值
print(names[3:0:-1])    # ['小S', 'GD', 'top']
print(names[-1:2:-1])   # ['小S']

(1)省略步长 - 相当于步长是1

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

names = ['yibo', 'top', 'GD', '小S', '水晶']
print(names[1:-1])
print(names[-2:2])

(2)省略开始下标

列表[:结束下标:步长] - 步长为正,从第一个元素开始往后取;步长为负,从最后一个元素往前取

列表[:结束下标] - (步长也省略)从第一个元素开始往后取

heros = ['后羿', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑']
print(heros[:4:2])      # ['后羿', '诸葛亮']
print(heros[:2:-1])     # ['孙膑', '王昭君', '甄姬', '娜可露露']
print(heros[:-1])       # ['后羿', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君']

(3)省略结束下标

列表[开始下标::步长] - 步长为正,从开始下标开始往后取到最后一个元素为止;步长为负,从开始下标往前取到最前一个元素
列表[开始下标:]

heros = ['后羿', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑']
print(heros[1:])        # ['李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑']
print(heros[2::-1])     # ['诸葛亮', '李元芳', '后羿']
print(heros[-1::-2])    # ['孙膑', '甄姬', '诸葛亮', '后羿']

(4)一起省

列表[::步长]

列表[:] - 步长默认1

heros = ['后羿', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑']
print(heros[::-1])      # ['孙膑', '王昭君', '甄姬', '娜可露露', '诸葛亮', '李元芳', '后羿']
print(heros[::2])       # ['后羿', '诸葛亮', '甄姬', '孙膑']
print(heros[:])         # ['后羿', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑']
3)遍历

方法一:直接获取元素

for 变量 in 列表:
    循环体
games = ['王者荣耀', '和平精英', '狼人杀', '植物大战僵尸', '开心消消乐']
for x in games:
    print(x)		# 每次循环取一次

练习;统计列表分数不及格的个数

scores = [90, 89, 67, 54, 32, 99, 67, 10]
count = 0
for x in scores:
    if x < 60:
        count += 1
print(x)       

方法二:先获取每个元素对应的下标,然后再通过下标获取元素

for 变量 in range(列表长度):
    列表[变量]

len(列表)     -   获取列表中元素的个数
games = ['王者荣耀', '和平精英', '狼人杀', '植物大战僵尸', '开心消消乐', '红警']
for x in range(len(games)):
    print(x, games[x])

练习:给一个数字列表,打印列表中所有3的倍数对应的元素

nums = [23, 9, 34, 5, 15, 6]
for x in range nums:
    if nums % 3 == 0:
        print(x)

二、operation

1.增 - 往列表中添加元素

1)列表.append(元素)

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


subjects = ['ios', '安卓']
print(subjects)     # ['ios', '安卓']
subjects.append('h5')
print(subjects)     # ['ios', '安卓', 'h5']

subjects.append([97, 85])       # ['ios', '安卓', 'h5', [97, 85]]
print(subjects)

print(subjects[-1])     # [97, 85]
print(subjects[-1][-1])     # [97, 85][-1]  == 85
2)列表.insert(下标,元素)

在列表的指定下标对应的元素前插入指定的元素

# 在甄嬛传和还珠格格中插入庆余年
tvs.insert(1, '庆余年')
print(tvs)      # ['甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
# 在甄嬛传前插入西游记
tvs.insert(0, '西游记')
print(tvs)      # ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']

练习:将输入的成绩插入到scores中,要求插入后不影响分数从大到小排序的性质

scores = [100, 98, 97, 97, 89, 86, 72, 66, 63, 59, 42]
nums = int(input'请输入分数(0~100):')
for x in range(len(nums)):
    if nums >= nums[x]
    scores.insert(nums)
    break
eles:
    scores.append(nums)
print(scores)

2.删 - 删除列表中的元素

1)del 列表[下标]

删除列表中指定下标对应的元素

tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
del tvs[-2]
print(tvs)      # ['西游记', '甄嬛传', '庆余年', '还珠格格', '琅琊榜']
2)列表.remove(元素)

删除列表中指定的元素

tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
tvs.remove('情深深雨蒙蒙')
print(tvs)      # ['西游记', '甄嬛传', '庆余年', '还珠格格', '琅琊榜']

如果元素或下标不存在会报错

tvs.remove('三生三世十里桃花')      # 报错ValueError: list.remove(x): x not in list

如果列表中有多个相同的元素,只删除靠前的一个

tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '庆余年', '琅琊榜']
tvs.remove('庆余年')
print(tvs)      # ['西游记', '甄嬛传', '还珠格格', '情深深雨蒙蒙', '庆余年', '琅琊榜']
3)pop
列表.pop()

取出列表最后一个元素,并且返回

tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
result = tvs.pop()
print(tvs)      # ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙']
print(result)   # 琅琊榜
列表.pop(下标)

取出列表指定下标的元素

tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
result = tvs.pop(1)
print(tvs)      # ['西游记', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
print(result)   # 甄嬛传

3.改 - 修改某个元素的值

列表[下标] = 新元素

修改列表中指定下标对应的元素为新元素

tvs = ['琅琊榜', '庆余年', '甄嬛传']
tvs[0] = '生活大爆炸'
print(tvs)      # ['生活大爆炸', '庆余年', '甄嬛传']

练习:将分数列表中所有低于60分的分数修改成’不及格’

scores = [78, 90, 20, 34, 78, 99, 34, 55]
for x in range(len(scores)):
    if scores[x] < 60:
        scores[x] = '不及格'
print(scores)	# # [78, 90, '不及格', '不及格', 78, 99, '不及格', '不及格']

三、otherOperation

1.列表数学运算: +、*

1)列表1 + 列表2

将两个列表合并产生一个新的列表(不会修改原列表)

list1 = [10, 20, 30]
list2 = [100, 200]
print(list1 + list2)        #[10, 20, 30, 100, 200]
2)列表 *N / N * 列表

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

print(list2 * 3)        # [100, 200, 100, 200, 100, 200]

2.比较运算 ==、!=、>、<、>=、<=

1)比较是否相等
print([10, 20, 30] == [10, 20, 30])     # True
print([10, 20, 30] == [30, 20, 10])     # Flase
2)比较大小

比较第一对不相等的元素的大小(两个列表相同位置上的元素是一对)

print([100, 200] > [10, 20, 30, 40, 10000])     # True
print([100, 200] > [100, 2000, 10000])      # False

3. in 和 not in

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

元素 not in 列表 - 判断指定的列表中是否不存在指定元素

nums = [10, 20, 30]
print(100 in nums)      # False
print(100 not in nums)  # True
print([10] in nums)     # False

4.相关函数:max、min、sorted、sum、list、len

1)max(列表)

获取列表中最大的元素

2)min(列表)

获取列表中最小的元素

列表中元素数据类型一致,并且元素本身支持比较元素

nums = [89, 923, 78, 100, 92, 8]
print(max(nums))        # 923
print(min(nums))        # 8
3)sorted(列表)

将列表中的元素从小到大排序,排序后产生一个新的列表(不修改原列表)

sorted(列表, reverse=True)

将列表中的元素从大到小排序,排序后产生一个新的列表(不修改原列表)

ewNums = sorted(nums)
print(newNums)      # [8, 78, 89, 92, 100, 923]
print(nums)         # [89, 923, 78, 100, 92, 8]

newNums = sorted(nums, reverse=True)
print(newNums)      # [923, 100, 92, 89, 78, 8]
4)sum(列表)

求列表中所有元素的和(列表必须是数字列表)

nums = [89, 923, 78, 100, 92, 8]
print(sum(nums))    # 1290
5)list(序列)

将序列转换成列表(获取序列中所有的元素创建一个新的列表)

注意:所有的序列都可以转换成列表 很重要

print(list('abc'))      # ['a', 'b', 'c']
print(list(range(1, 4)))     # [1, 2, 3]

作业

1.已知一个数字列表,求列表中心元素。

nums = [1, 2, 5, 7, 9, 11]
l = len(nums)
if len(nums) % 2:
    print(nums[l // 2])
else:
    print(nums[l // 2 - 1], nums[l // 2])

2.已知一个数字列表,求所有元素和。

nums = [1, 2, 3, 4, 5, 6]
print(sum(nums))

3.已知一个数字列表,输出所有奇数下标元素。

nums = [1, 2, 3, 4, 5, 6, 7, 11]
print(nums[1::2])

4.已知一个数字列表,输出所有元素中,值为奇数的元素。

nums = [1, 2, 3, 4, 5, 7, 11]
for x in nums:
    if x % 2:
        print(x, end=' ')
print()

5.已知一个数字列表,将所有元素乘二。

例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]

nums = [1, 2, 3, 4, 5, 6]
for x in range(len(nums)):
    nums[x] *= 2
print(nums)

6.有一个长度是10的列表,数组内有10个人名,要求去掉重复的

例如:names = [‘张三’, ‘李四’, ‘大黄’, ‘大黄’, ‘张三’, ‘张三’, ‘张三’] -> names = [‘张三’, ‘李四’, ‘大黄’]

# 方法一:
names = ['张三', '李四', '大黄', '大黄', '张三', '张三', '张三']
newNames = []
for x in names:
    if x not in newNames:
        newNames.append(x)
print(newNames)

# 方法二:
names = ['张三', '李四', '大黄', '大黄', '张三', '张三', '张三']
l = len(nums)
for x in range(l):
    item =names.pop()
    if item not in names:
        names.insert(0, item)
print(names)

7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)

# 方法一:
nums = [99, 89, 88, 97, 85, 77, 89]
print('平均分:', (sum(nums) - max(nums) - min(nums)) / (len(nums)-2))

# 方法二:
nums = [99, 89, 88, 97, 85, 77, 89]
max1 = min1 = nums[0]
sum = count = 0
for x in nums:
    sum += x     # 和
    count += 1    # 次数
    if x > max1:
        max1 = x    # 取最大值
    elif x < min1:
        min1 = x    # 取最小值
result = (sum - max1 - min1) / (count - 2)
print('平均分:', result)

8.有两个列表A和B,使用列表C来获取两个列表中公共的元素

例如: A = [1, ‘a’, 4, 90] B = [‘a’, 8, ‘j’, 1] --> C = [1, ‘a’]

A = [1, 'a', 4, 90]
B = ['a', 8, 'j', 1]
C = []
for x in A:
    if x in B and x not in C:
        C.append(x)
print(C)

9.*有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)

例如: nums = [19, 89, 90, 600, 1] —> 600

nums = [19, 89, 90, 600, 1]
max = 0
for x in nums:
    if max < x:
        max = x
print(max)

10.*获取列表中出现次数最多的元素

例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3] —> 打印:3

nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3]
counts = []
for num1 in nums:
    count = 0
    for num2 in nums:
        if num2 == num1:
            count += 1
     counts.append(count)
m = max(counts)
for index in range(len(counts)):
    if counts[index] == m:
        print(nums[index])
        break
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值