day5-列表增删改及相关操作

列表的增删改

  • 增 - 添加元素

    • 1) 列表.append(元素) 在列表的最后追加指定元素

       tvs = ['回家的诱惑', '非自然死亡', '我的兄弟叫顺溜', '琅琊榜', '甄嬛传', '亮剑', '请回答1988']
       print(tvs)
       tvs.append('生活大爆炸')
       print(tvs)
      
      
      # 练习 用一个列表保存100以内所有能被3整除的数
      list1 = []
      for i in range(3, 100, 3):
          list1.append(i)
      print(list1)
      
      1. 列表.insert(下标,元素) - 在指定下标所在位置前插入元素
       tvs.insert(1, '人民的名义')
       print(tvs)
      
      # 练习 已经一个列表scores按分数从高到低保存了一个班学生的分数,请输入一个新的分数,将新的分数插入到scores中,并且保证插入后不影响
      
       scores = [98, 93, 91, 87, 83, 80, 77, 70, 65, 62, 56]
       num = int(input('请输入成绩:'))
      
       for index in range(len(scores)):
           if num >= scores[index]:
               scores.insert(index, num)
               break
       else:
           scores.append(num)
       print(scores)
      
  • 删 - 删除列表中的元素

     tvs = ['回家的诱惑', '非自然死亡', '我的兄弟叫顺溜', '琅琊榜', '琅琊榜','琅琊榜','甄嬛传', '亮剑', '请回答1988']
     print(tvs)
    
    • 1)del 列表[下标] - 删除列表中指定下标对应的元素

       del tvs[1]
       print(tvs)  # ['回家的诱惑', '我的兄弟叫顺溜', '琅琊榜', '甄嬛传', '亮剑', '请回答1988']
      
       del tvs[-1]
       print(tvs)   # ['回家的诱惑', '我的兄弟叫顺溜', '琅琊榜', '甄嬛传', '亮剑']
      
      # 下标越界
      # del tvs[6]    # IndexError: list assignment index out of range
      
      
      1. 列表.remove(元素) - 删除列表中指定元素
      #如果删除的元素在列表中有多个,只删除最前面第一个
      
      tvs.remove('非自然死亡')
      print(tvs)
      
      tvs.remove('琅琊榜')
      print(tvs)    # ['回家的诱惑', '我的兄弟叫顺溜', '琅琊榜', '琅琊榜', '甄嬛传', '亮剑', '请回答1988']
      
      tvs.remove('吸血鬼日记')
      print(tvs)   # ValueError: list.remove(x): x not in list
      
      
      删除重复元素中的最后一个
      for index in range(-1, -len(tvs), -1):
          if tvs[index] == '琅琊榜':
              del tvs[index]
              break
      print(tvs)
      
    • 3)列表.pop() - 取出列表最后一个元素,并且返回

      列表.pop(下标) - 取出列表指定下标对应的元素,并且返回

      tvs = ['回家的诱惑', '非自然死亡', '我的兄弟叫顺溜', '琅琊榜', '甄嬛传', '亮剑', '请回答1988']
      print(tvs)
      
      res1 = tvs.pop()
      print(tvs)  # ['回家的诱惑', '非自然死亡', '我的兄弟叫顺溜', '琅琊榜', '甄嬛传', '亮剑']
      
      res2 = tvs.pop(1)
      print(tvs)  # ['回家的诱惑', '我的兄弟叫顺溜', '琅琊榜', '甄嬛传', '亮剑']
      
      print(res1, res2)     # 请回答1988 非自然死亡
      
      
  • 改 : 列表[下标] = 新值 - 修改列表中指定下标的元素

     tvs = ['回家的诱惑', '非自然死亡', '我的兄弟叫顺溜', '琅琊榜', '甄嬛传', '亮剑', '请回答1988']
     print(tvs)
    
     tvs[0] = '行尸走肉'
     print(tvs)  # ['行尸走肉', '非自然死亡', '我的兄弟叫顺溜', '琅琊榜', '甄嬛传', '亮剑', '请回答1988']
    
    
  • 练习:删除scores中所有小于60分的成绩

    # 1)坑一 下标改变,删除不完
    for s in scores:
        if s < 60:
            scores.remove(s)
    
    print(scores)    # [87, 50, 78, 99, 23, 76, 89]
    
    # 解决: 在删除之前先备份,遍历备份数据
    # 拷贝一份
    #f1
    list1 =[]
    for i in range(len(scores)):
        list1.append(scores[i])
    print(list1)
    #f2
    temp = scores  #不能直接复制,只复制了地址
    temp = scores[:]
    for x in temp:
        if x < 60:
            scores.remove(x)
    print(scores)   # [87, 78, 99, 76, 89]
    
    
    
    
    # 补充: 如果直接用一个列表变量给另一个变量赋值,赋的是原变量中数据的地址
    a=[10,20,30]
    b=a
    c=a[:]
    a.append(100)
    print(b)     #  b也改变  [10, 20, 30, 100]
    print(c)     # [10, 20, 30]
    
     # 下标越界
    scores = [87, 34, 50, 23, 78, 99, 45, 23, 76, 89, 30]
    #for index in range(len(scores)):
     #   if scores[index] < 60:
     #       del scores[index]
    #print(scores)  #下标越界
    
    
    i = 0
    while True:       #用while循环控制循环次数,跳过再+1
        if scores[i] >= 60:
            i += 1
        else:
            del scores[i]
        if i >= len(scores):
            break
    print(scores)
    
    # 从后往前遍历
    for index in range(len(scores)-1,-1,-1):
        if scores[index]<60:
            del scores[index]
    print(scores)
    
     scores = [87, 34, 50, 23, 78, 99, 45, 23, 76, 89, 30]
    # [87, 78, 99, 76, 89]
     list1 = []
     for s in scores:
         if s >= 60:
             # print(scores[i])
             list1.append(s)    #提取及格
     print(list1)
     print(scores)
    

list 相关操作

  • 1.加法和乘法运算

    • 列表1 +列表2 - 将两个列表合并产生一个新的列表

      list1 = [10, 20, 30] + ['abc', 123]
      print(list1)   # [10, 20, 30, 'abc', 123]
      
    • 列表 *N(正整数) - 列表中的元素重复N次产生一个新的列表

      list2 = [10,20,30]*3
      print(list2)  # [10, 20, 30, 10, 20, 30, 10, 20, 30]
      
  • 2.in 和 not in

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

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

      print(10 in [10,20,30])   # True
      print([10,20] in [10,20,30])  # False   不是一个元素
      print([10,20] in [[10,20],30])  # True
      
      # 1.
      num = 9
      if num == 10 or num == 11 or num == 12:
          pass
      
      if num in [10,20,30]:
          pass
      
      # 2.
      x = 89
      if type(x) == int or type(x) == float:
          pass
      if type(x) in [int, float]:
          pass
      
      

作业

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

num = [2,3,5,8,6,4,6,5,7,3,5,2]
if len(num) % 2:
    print(num[len(num) // 2])
else:
    print(num[len(num) // 2 -1], num[len(num) // 2])

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

num = [2,3,5,8,6,4,6,5,7,3,5,2]
s = 0
for n in num:
    s += n
print(s)

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

num = [2,3,5,8,6,4,6,5,7,3,5,2]
list1=[]
for index in range(len(num)):
 if num[index] % 2:
     list1.append(index)
     

print(list1)    #[1, 2, 7, 8, 9, 10]




nums=[1,2,3,4,5,6]
print(nums[1::2])    #切片

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

 num = [2,3,5,8,6,4,6,5,7,3,5,2]
 for n in num:
     if n % 2:
         print(n)

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

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

num = [1,2,3,4]
list2=[]
for n in num:
    list2.append(n*2)
print(list2)

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

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

#f1
names=['张三', '李四', '大黄', '大黄', '张三', '张三', '张三','王五','大黄','王五']
list3 = []
for n in names:
    if list3.count(n) < 1:
        list3.append(n)
print(list3)



#f2 利用集合
names=['张三', '李四', '大黄', '大黄', '张三', '张三', '张三','王五','大黄','王五']
names =list(set(names))
print((names))

# 去重
names=[1,5,2,1,4,2,4,6]
new_name = []
for name in names:
    if name not in new_name:
        new_name.append(name)
print(new_name)

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

scores=[90,70,75,65,83,84,86,82,84]
scores.remove(max(scores))
scores.remove(min(scores))
s=0
for x in scores:
    s+=x
print(s/len(scores))

# f2
print(sum(score)-max(score)-min(score))/len(score)-2

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 i in range(len(A)):
    for j in range(len(B)):
        if A[i] == B[j]:
            C.append(A[i])
print(C)

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

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

nums = [19, 89, 90, 600, 1]
max1 = 0

for x in nums:
    if x >= max1:
        max1 = x
print(max1)

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]
c=[]
max2=0

for n in nums:
    c.append(nums.count(n))
# print(c)

for x in c:
    if x >= max2:
        max2 = x
# print(max2)

for i in range(len(c)):
    if max2 ==c[i]:
        print(nums[i])



#f2
# 去重 -> 统计个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值