初学Python03

(三)列表

  • 列表是用方括号括起来的[ ],每个元素以逗号分隔;

  • 可以储存不同的数据类型数据

  • 特点

    • 是一个有序的
    • 可以重复的
    • 可变类型

3.1创建

  • 创建空列表:li = [ ]
  • 创建多元素列表: li =[1,2,3,“abcd”,“city”,[“i”,“love”,“you”]]
  • 强转: sr = “abcd” li = list(sr)

3.2拼接

li1 = ["I"]
li2 = ["love"]
print(li1+li2)

3.3重复

li1 = ["I"]
print(li1*3)

3.4索引(偏移) [ ],切片[:],[: :]

li = ["C","i","t","y",["collage",1,2]]
print(len(li))
print((li[0],li[-2]))  #- 从右往左数第几个
print(li[:4])
print(li[4][0])

3.5列表的常见操作

(1)增

  • apppend( ) #整体插进去
li = ["city","College"]
li1 = ["a","b","c"]
li.append(li1)
print(li)

  • extend( ) #先取出来再插进去
li = ["city","College"]
li1 = ["a","b","c"]
li.extend(li1)
print(li)

  • insert( ) #按照索引添加
li = ["city","College"]
li1 = ["a","b","c"]
li.insert(1,li1)
print(li)

(2)改


li = ["city","College",1,2,3]
li[0] = 666
li[2:6] = ["x","y","z"]
print(li)

(3)删除

  • pop(),返回被删除的元素
    • 如果不指定索引,默认删除最后一个元素
    • 删除指定索引的对应元素
li = ["city","College",1,2,3]
print(li.pop(2))
print(li)

  • remove(),移除第一次遇到的指定元素
  li = ["city","College",1,2,3,2]
  print(li.remove(2))
  print(li)
  • del
  li = ["city","College",1,2,3,2]
  del li[4]
  print(li)

clear() 全部清空

li = ["city","College",1,2,3,2]
li.clear()
 print(li)

(4)查(遍历)

  • 遍历

    • 元素遍历
  li = ["a","b","c","d"]
  for i in li:
      print(i)
  • 索引遍历
  li = ["a","b","c","d"]
  for i in range(len(li)):
      print(li[i])
  • 枚举遍历:

​ enumerate( ),对于一个可迭代的/可遍历的对象(列表,字符串等)

  li = ["a","b","c","d"]
  for i in enumerate(li,2):
      print(i)

​ enumerate( ),将其组成一个索引序列,利用它,我们可以同时获得索引值

li = ["a","b","c","d"]
for index,value in enumerate(li[:2],2):
  print(index,value)

堆和栈,用列表实现

  • 计数,count( ),查找元素出现的次数
  • 反转,reverse( )
  • 排序,sort( ), 按照ASCII码值排序
  li = list("abcd")
  print(li)
  li.reverse()
  print(li)



li.sort()
print(li)
li.sort(reverse=True)
print(li)

练习

交集:

li1 = ["a","b","c","e"]
li2 = ["a","c","f","g"]
li3 = []
for i in range(len(li1)):
  for j in range(len(li2)):
      if li2[j]==li1[i]:
          li3.append(li2[j])
print(li3)

input()函数实现往空列表中添加元素,"q"的时候,结束输入,并返回列表。

li = []
while True:
  inp = input("请输入列表元素:\t")
  if inp == "q":
      break
  else:
      li.append(inp)
print(li)

随机生成30个0-10的随机整数,并统计每个数出现的次数,返回的结果形式为[[0,3],[1,4],…[10,5]]

import  random
ran_int = []
result_li = []
for i in range(30):
  ran_int.append(random.randint(0,10))
for i in range(11):
  result_li.append([i,ran_int.count(i)])
print(result_li)

(5)赋值与深浅拷贝

  • 赋值是对对象的引用

    la = [1,2,3,4,5,"a",["b1","b2"]]
    lb = la
    print(la)
    print(lb)
    print(la is lb)
    la[5] = "666"
    print(la is lb)  #指向同一区域还是相同
    
  • 深浅拷贝

    • 浅拷贝会创建新对象,内容是原对象的引用(copy后最外层不会变,里层还是会一起变动)

      三种方法实现

      • 切片操作[:]
      • 工厂函数list(li)
      • copy模块内的copy函数
    la = [1,2,3,4,5,"a",["b1","b2"]]
    lb = la
    lb2 = la[:]
    print(id(la),id(lb2))
    import copy
    lb_copy =copy.copy(la)
    print(id(la),id(lb_copy))
    la.append("test")  #添加原子类型,不会影响lb_copy
    print(la)
    print(lb_copy)
    
  • 深拷贝

    import copy
    la = [1,2,3,4,5,"a",["b1","b2"]]
    lb_deepcopy =copy.deepcopy(la)
    la[5] = ["aaa"]
    print(la,lb_deepcopy)
    la[6][0]="aaaaa"
    print(la,lb_deepcopy)
    
  • 对象引用

    • 浅拷贝:相当于我们只拷贝了一层,修改外层元素,会修改引用,让他们指向另一个位置;修改嵌套列表的元素,列表地址没有发生变化,指向的还是同一个位置。
    • 深拷贝:拷贝对象的所有元素,包括多层嵌套元素。因此,是开辟了一个新的内部存储区,和数据源没有关系了。

(6)列表解析式

li = []
for x in range(10):
  li.append(x)
print(li)
print([x for x in range(10) if x%2==0])

(7)列表生成式

用来生成列表的特定语法形式

sr = "城市学院"
print([ord(x) for x in sr])

格式:

[表达式 for 迭代元素 in 可迭代对象 if if条件]
[exp for iter_val in iter if if_condtion]





name = ["Tom","Jack","Alice"]
subject = ["Python","Java","C","C++"]
li = []
for i in name:
  for j in subject:
      li.append([i,j])
print(li)


print([[i,j] for i in name for j in subject])

实现原理:

  • 迭代[可迭代对象]中的每一个元素

  • 每迭代一次的结果赋值给对应的迭代元素,在通过表达式运算中得到一个新的值

  • 最后所有通过表达式计算的值以一个列表的形式返回。

(四)元组

  • 有序
  • 可重复
  • 不可更改(地址不可更改,内容可以变)

符号使用():

  • 定义:

4.1元组的创建

  • 空元组的创建,不能添加元素

  • 单元素元组的创建,需要在单元素后面加个“,”

    li = []
    tp = ()
    print(type(tp))
    tp = ("abc")
    print(type(tp))
    tp = ("abc",)
    print(type(tp))
    
  • 多元素元组的创建,包含多种数据类型

4.2拼接

tp = ("abc")
tp1 = ("def")
tp2 = tp+tp1
print(tp2)

4.3重复

tp1 = ("def")
print(tp1*3)

4.4索引(偏移) 切片

tp = ("def",666,[1,2,3])
print(tp[0],tp[-2])
print(tp[2][0])
print(tp[:2])

4.5查

  • 索引查

  • 切片查

  • index( )

    tp = ("def",666,"a","b","c",[1,2,3])
    print(tp.index("a"))
    
  • 增 不能操作

  • 删 不能;但是可以全部删除 del tp(地址还是不变)

  • 改 第一层不能操作

4.6最大值、最小值

tp = ("def","a","b","c")
print(max(tp),min(tp))

4.7 遍历

  • 元素遍历
tp = ("def","a","b","c")
for i in tp:
   print(i)
   ```
    

- 索引遍历

 ```python
 tp = ("def","a","b","c")
 for i in range(len(tp)):
     print(tp[i])
  • 枚举enumerate

    • enumerate( ),对于一个可迭代的/可遍历的对象(列表,字符串等)
    tp = ("def","a","b","c")
    for i in enumerate(tp,2):
        print(i)
    
    • enumerate( ),将其组成一个索引序列,利用它,我们可以同时获得索引值
tp = ("def","a","b","c")
for index,value in enumerate(tp[:2],2):
   print(index,value)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值