Python中的列表和元组-后篇

一。列表

01.列表的增删改

1.在列表中添加元素。

  • 1.)append(追加)
  • 列表.append(元素) - 在列表的最后添加指定的元素(不会产生新的数据,是直接修改的愿列表)
names = ['路费', '索隆','罗宾']
names.append('娜美')
print(names)
  • 2).insert
  • 列表.inzert(下标,元素) - 在列表指定下标前插入指定的元素
names.insert(1, '乌索普')
print(names)
  • 3)extend(扩充)
  • 列表.extend(序列) - 将序列中所有的元素添加到列表的最后
sports = ['篮球', '足球', '乒乓球']
sports.extend(['羽毛球', '阿皮球'])
练习:给一个分数列表:[90, 56, 78, 89, 45, 60, 32, 100],在这个列表中所有不及格的分数后
加上元素:[90, 56, 0, 78, 89, 45,0, 60, 32, 0, 100]
# 错误方法一:
# for index, item in enumerate(scores):
#     print(index, item)
#     if item < 60:
#         scores.insert(index+1, 0)
# print(scores)
scores = [90, 56, 78, 89, 45, 60, 32, 100]
new_scores = scores[:]
for index, item in enumerate(new_scores):
    if item < 60:
        scores.insert(index + 1, 0)
print(scores)

"""
scores = [90, 56, 78, 89, 45, 60, 32, 100]
new_scores = [90, 56, 78, 89, 45, 60, 32, 100]
index = 0, item=90:  if 90 < 60
index = 1, item=56:  if 56 < 60  -> scores.insert(index + 1, 0) -> scores.insert(2, 0)
                                 -> scores = [90, 56, 0, 78, 89, 45, 60, 32, 100]
index = 2, item=78: if 78 < 60
index = 3, item=89: if 89 < 60
index = 4, item=45: if 45 < 60 -> scores.insert(5, 0) 
                               -> scores = [90, 56, 0,78, 89, 0, 45, 60, 32, 100]
index = 5, item=60: if 60<60
index = 6, item=32: if 32<60  -> scores.insert(7, 0)
                              -> scores = [90, 56, 0,78, 89, 0, 45, 0, 60, 32, 100]
index = 7, item=100, if 100<60
"""
错误方法二
scores = [90, 56, 78, 89, 45, 60, 32, 100]
for index in range(len(scores)):
    print('index:', index)
    if scores[index] < 60:
        scores.insert(index+1, 0)
print(scores)    # [90, 56, 0, 0, 0, 0, 0, 0, 0, 78, 89, 45, 60, 32, 100]

"""
scores = [90, 56, 78, 89, 45, 60, 32, 100]
index = 0~7
index = 0:  90 < 60
index = 1:  56 < 60 ->  scores = [90, 56, 0, 78, 89, 45, 60, 32, 100]
index = 2:  0 < 60 ->  scores = [90, 56, 0, 0, 78, 89, 45, 60, 32, 100]
index = 3:  0 < 60 ->  scores = [90, 56, 0, 0, 0, 78, 89, 45, 60, 32, 100]
index = 4:  ....
"""

# 解决方法一:
scores = [90, 56, 78, 89, 45, 60, 32, 100]
new_scores = scores[:]
index = 0   # scores中元素的下标
for item in new_scores:
    print(index, item)
    if item < 60:
        scores.insert(index+1, 0)
        index += 1
    index += 1
print(scores)

2. 删除 --删除元素

  • 1)。del
  • del 列表[下标] - 删除列表中指定下标对应的元素(下标不能越界)
names = ['后裔', '王昭君', '伽罗', '百里守约', '甄姬', '王昭君']
del names[2]  # (2是第三个)
  • 2).remove
  • 列表.remove(元素) - 删除列表中指定元素(如果元素不存在会报错,元素有多个只删除最前面的那一个。)
names = ['后裔', '王昭君', '伽罗', '百里守约', '甄姬']
names.remove('伽罗')
names.remove('王昭君')
  • 3).pop
  • 列表.pop() - 取出列表中的最后一个元素,返回的数据就是取出来的元素。
  • 列表.pop(下标) - 取出列表中指定下标对应的元素,返回的数就是取出来的元素。
names = ['后裔', '王昭君', '伽罗', '百里守约', '甄姬']
names.pop()
del_name = names.pop()
print(names, del_name)
  • 4)clear
  • 列表.clear() - 删除列表中所有的元素
  • 效率比直接赋值为[]高。
names = ['后裔', '王昭君', '伽罗', '百里守约', '甄姬']
names.clear()
names = []
  • 练习: 给一个分数列表:[90, 56, 78, 89, 45, 60, 32, 100], 在这个列表中所有不及格的分数后加上元素:0
    [90. 56,0, 78, 89, 45,0, 60, 32,0, 100]

自己做的

scores = [90, 56, 40, 67, 92, 89, 59]
del_scores = [90, 56, 40, 67, 92, 89, 59]
for x in scores:
    print(x)
 del_scores = [90, 56, 40, 67, 92, 89, 59]
    if x < 60:
        del_scores.remove(x)
print(del_scores)   

错误二

scores = [90, 56, 40, 67, 92, 89, 59]
for x in scores:
    print(x)
    if x < 60:
        scores.remove(x)
print(scores)  # [90,  40, 67, 92, 89]

“”"
分析:

第一个元素:x = 90
第二个元素:x < 60: scores = [90, 67, 92, 89, 59]
第三个元素:x =67 
第四个元素:x = 92
...
循环结束: scores = [90,  40, 67, 92, 89]
思路先备份scores,不过要切片。直接赋值和切片是有区别的。

“”"

scores = [90, 56, 40, 67, 92, 89, 59]
new_scores = scores[:]
for score in new_scores:
    print('2:', score)
    if score < 60 :
        scores.remove(score)
print(scores)

3.改 - 修改元素列表的值

  • 列表[下标] = 新元素 - 将列表指定下标对应的元素修改成新的元素
movies = ['恐怖游轮', '致命ID', '忍者神龟', '赌神' , '雪国列车']
movies[-2] = '盗梦空间'
print(movies)

02列表的相关操作

1.列表的加法运算和乘法运算

  • 列表1 + 列表2 - 将列表1和列表2合并产生一个新的列表
  • 列表 * N 或者N * 列表 - 列表中的元素重复N次产生一个新的列表(N是正整数)
  • 加法和乘法运算不会修改原列表

2.比较运算

  • 1) ==, !=
print([10,20,30]) ==[20,10,30]  #  False
  • 2)>, < , >=,<=
print([100,200,300,400] > [200, 100])  
# False,100< 200,从第一位开始一个一个的比较,谁高谁赢。

3.in 和 not in

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

4.系统函数:len/max/min/sorted/sum

  • len(序列) - 获取数列中元素的个数
    pythons = [‘小明’,‘张三’,‘小花’,‘BOb’,]
  • max(序列)/min(序列) -求序列中元素的最大值/最小指
  • sorted(序列) - 对序列中的元素从小到大排序,产生一个新的列表(不会修改原数列)
  • sorted(序列,reverse=True) - 对序列中的元素从大到小排序,产生一个新的列表。(不会修改原序列)
  • sum(序列) - 求序列中所有元素的和
  • list(序列) - 将指定的序列转换成列表
    1. 所有的序列都可以传换成列表 2)将序列中的元素变成列表中的元素。
print(list('abc'))  # ['a', 'b', 'c']
print(list(range(4)))  # [0, 1, 2, 3]

03列表相关的方法

  • 1.list - ctrl + 鼠标左键可以看源码(list)

1.列表 .copy()

  • -复制原列表产生一个一模一样的新列表(相当于列表[:]; 浅拷贝)
nums = [10,20,30]
nums1 = nums
nums2 = nums.copy() 
nums.remove(20)
print('nums1', nums1)
print('nums2', nums2)

  • 注意:和nums1 = nums不同,nums1 = nums后面nums做的操作同样会操作到nums1,但是nums2是没有影响的。

2.列表.count(元素) - 统计列表中指定元素的个数

foods = ['大闸蟹','小龙虾','花甲','包子','油条','小龙虾','包子','小龙虾']
print(foods.count('小龙虾'))

3.列表.index(元素) - 获取指定元素的下标(如果元素有多个返回第一个元素的下标;如果元素不存在会报错)

foods = ['大闸蟹','小龙虾','花甲','包子','油条','小龙虾','包子','小龙虾']
print(foods.index('花甲'))  # 2

4.列表.reverse() - 将指定列表逆序

foods = ['大闸蟹','小龙虾','花甲','包子','油条','小龙虾','包子','小龙虾']
foods.reverse()
print(foods)

5.列表.sort() -排序,将列表中的元素从小到大排序(不会产生新的列表)

列表.sort(reverse = True) - 将列表中的元素从大到小排序(不会产生新的列表)

ages = [56,89,23,34,18,23,25]
ages.sort()
print(ages)
ages.sort(reverse=True)
print(ages)

二:元组

1.元组就是不可变的列表;

  • 列表中除了增删改的操作,其他元组都支持.。
  • 1)元素可以是任何类型的数据
tuple = (10,20,30,"abc",True,[1,2])
print(tuple)
  • 2)列表获取元素的方法都适用于元组
  • 获取单个元素
tuple2 =('杨幂',"刘亦菲","赵丽颖" ,"张艺馨" )
print(tuple2[1])
  • 遍历
for x in tuple2:
    print("x:", x)
for index, item in enumerate(tuple2):
    print()
  • 切片
print(tuple2[::-1])
  • 3)列表相关操作都适用于元组
print((1,2,3) + ('a', 'b'))  # (1,2,3,"a","b")
nums = (10,20,30)
print(max(nums))
print(sorted(nums) )   # 只能用sorted .
print(tuple("abc"))    # 转换成元组。
  • 相关方法
nums =(10,34,56,40,10,30)
print(nums.count(10))   # 2
print(nums.index(34))   # 1

2.元组特有的一些方法和功能

  • 1)只有一个元素的元组。一定要有逗号。
list = [100]
print(tyoe(list1))  # class "list"

tuple1 = (100)
print(type(tuple1))  # class "int"
tuple1 =(100,)
print(type(tuple1))  # class tuple,一定要有逗号。
  • 2)直接多个数据用逗号隔开表示的也是一个元组(元组的括号在没有歧义的时候可以省略)
tuple2 = (100,200,300)
tuple3 = 100,200,300
print(type(tuple3),tuple3) # class "tuple"  (100,200,300)
  • 3)获取元素的时候可以通过让变量的个数和元组中元素的个数保持一致,来分别获取元祖中每个元素的值.
point = (100,200)
x,y = point
print(x,y)   # 100 200
  • 4)让变量的个数少于元组中元素的个数,并且在一个变量前加 * 一个列表
    先让没有 * 号的变量依次获取元素,然后把剩下的所有的元素作为一个列表返回
stu = ("小明",30,nan,89,78,56,100)
name, age ,gender,*scores = stu
print(name ,age, gender)  # 小明 30 男
print(scores)
a, *b = stu
print(a)   # 小明
a, *b c = stu
print (a,c)  # 小明 100
print(b)   # [30,'男' 89 ,78 ,56]
a, *b,c,d =stu
print(a,c,d) # 小明  56 100
print(b)  # [30,"男“,89 ,78]

猜你喜欢

转载自blog.csdn.net/xinxing66/article/details/107616648
今日推荐