day3列表元组

文章目录

列表

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

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

数组

特点:

  • 是一个有序的

  • 可以重复的

  • 可变类型

  • 创建空列表

li = []
  • 创建多元素列表

li = [1, 2, 3, "HangZhou", "City", "College", ['I', 'Love', 'Python']]
  • 强转

sr = 'abcd'
li = list(sr)
print(li,type(li))
  • 拼接

li1 = ['I']
li2 = ['Love', 'Python']
print(li1 + li2)

#['I', 'Love', 'Python']
  • 重复

print(li1 *3 )
  • 索引(偏移) [] ,切片 [:],[:]

li = ['C', 'i', 't', 'y', 'City', 'College', ['City', 'College']]
print(len(li))          # 7
print(li[0], li[-7])    # C C
print(li[:5])           # ['C', 'i', 't', 'y', 'City']
print(li[::-1])         # [['City', 'College'], 'College', 'City', 'y', 't', 'i', 'C']
print(li[4][1])         # i
print(li[6][1])         # College
  • 列表的常见操作

1.增

.append()   #
li = ['City', 'College']
print(id(li))             #1510909945864
li1 = ['a', 'b', 'c']
li.append(li1)            
print(li, id(li))         #['City', 'College', ['a', 'b', 'c']] 1510909945864

sr = '城市学院'
li2 = []
for i in sr:
    li2.append(ord(i))
print(li2)
#[22478, 24066, 23398, 38498]
.insert()   #按索引添加
li = ['City', 'College']
li1 = ['a', 'b', 'c']
li.insert(1,li1)
print(li)             #['City', ['a', 'b', 'c'], 'College']
.extend()   #
li = ['City', 'College']
li1 = ['a', 'b', 'c']
li.extend(li1)
print(li)
#['City', 'College', 'a', 'b', 'c']

2.改

li = ['City', 'College']
li1 = ['a', 'b', 'c']
li.insert(1,li1)
print(li)            #['City', ['a', 'b', 'c'], 'College']

li[2] = '666'
print(li)            #['City', ['a', 'b', 'c'], '666']

li[2:5] = ['x', 'y', 'z']
print(li)            #['City', ['a', 'b', 'c'], 'x', 'y', 'z']

3.删

.pop()  #返回被删除的元素
        #如果不指定索引,默认删除最后一个元素
        #删除指定索引对应的元素
li = ['a', 'b', 'c', 'd', 'e']
print(li.pop(2))    # c
print(li)           # ['a', 'b', 'd', 'e']

.remove() #移除第一次遇到的指定元素    
li = ['a', 'b', 'c', 'd', 'e', 'city', 'e']
print(li.remove('e'))   #None  没有返回值
print(li)               #['a', 'b', 'c', 'd', 'city', 'e']
-del
li = ['a', 'b', 'c', 'd', 'e', 'city', 'e']
del li[5]
print(li)  
#['a', 'b', 'c', 'd', 'e', 'e']
.clear()
li = ['a', 'b', 'c', 'd', 'e', 'city', 'e']
li.clear()
print(li)
#[]   清空列表

4.查 遍历

  • 元素遍历
li=["a","b","c"]
for i in li:
    print(i)
#a
#b
#c
  • 索引遍历
li=["a","b","c"]
for i in range(len(li)):
    print(li[i])
#a
#b
#c
  • 枚举遍历
.enumerete()  #对于一个可迭代的/可遍历的对象(如列表,字符串等)
              #将其组成一个索引序列,利用它,我们可以同时获得索引和值

li = ['a', 'b', 'c']
for i in enumerate(li,2):
    print(i)
(2, 'a')
(3, 'b')
(4, 'c')
  • 堆和栈,用列表实现
  • 其他操作
.count()#计数,查找元素出现的次数
.reverse()#反转
.sort()#排序,按照ascii排序

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

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

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

import random
li = []
li2 = []
for i in range(30):
    li.append(random.randint(0,10))
print(li)
sum = 0
for i in range(0,11):
    li2.append([i,li.count(i)])
    sum += li.count(i)
print(li2)
print(sum)

赋值

赋值是对对象的引用

la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb = la
print(la)                       # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
print(lb)                       # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
print(id(la),id(lb))            # 2039160711048 2039160711048
print(la is lb)                 # True

la[5] = 'aaa'
print(la)                       # [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
print(lb)                       # [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]

深浅拷贝

深拷贝会创建新对象,内容是原对象的引用

三种实现方法:

  • 切面操作[:]
  • 工厂函数list (li)
  • copy模块内的copy函数
la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb = la
lb2 = la[:] 
print(lb2)                    # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
print(id(la), id(lb2))        # 2115390023688 2115419799240

import copy
lb_copy = copy.copy(la)
print(lb_copy)                # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
print(id(la), id(lb_copy))    # 2115390023688 2115421295944

la.append('test')             #添加原子类型不会影响lb_copy
print(la)                     # [1, 2, 3, 4, 5, 'a', ['b1', 'b2'], 'test']
print(lb_copy)                # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
import copy
la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb_copy = copy.copy(la)
la[6][0] = 'bbb'
print(la)                     # [1, 2, 3, 4, 5, 'a', ['bbb', 'b2']]
print(lb_copy)                # [1, 2, 3, 4, 5, 'a', ['bbb', 'b2']]

import copy
la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb_copy = copy.copy(la)
la[6] = 'bbb'
print(la)                    # [1, 2, 3, 4, 5, 'a', 'bbb']
print(lb_copy)               # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]

深拷贝

import copy
la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb_deepcopy = copy.deepcopy(la)
print(la, id(la))       
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2450386351624
print(lb_deepcopy, id(lb_deepcopy))
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2450386352904

la[5] = 'aaa'
print(la)             # [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
print(lb_deepcopy)    # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]

la[6][1] = 'bbb'
print(la)             # [1, 2, 3, 4, 5, 'a', ['b1', 'bbb']]
print(lb_deepcopy)    # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]

浅拷贝相当于我们只拷贝了一层,修改外层元素,会修改引用,让他们指向另一个位置;

修改嵌套列表的元素,列表地址没有发生变化,只想的还是同一个位置

深拷贝拷贝对象的所有元素,包括多层嵌套的元素。因此,是开辟了一个新的内存存储区,和数据源没有关系了

列表解析式

li = []
for x in range(10):
    li.append(x)
print(li)

print([x for x in range(10)])   # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print([x for x in range(10) if x % 2 == 0])    # [0, 2, 4, 6, 8]

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

sr = "城市学院"
print([ord(x) for x in sr])   #[22478, 24066, 23398, 38498]
print([x for x in sr])        #['城', '市', '学', '院']

格式:
[表达式 for 迭代元素 in 可迭代对象]

实现原理:

  • 迭代[可迭代对象]中的每一个元素
  • 每迭代一次的结果赋值给对应的迭代元素,在通过表达式运算得到一个新的值
  • 最后所有通过表达式计算的值以一个列表的形式返回

三目运算符

y = 10
x = y + 1 if y>10 else y-1
print(x)                                 #9

带过滤功能格式

[exp for iter_val in iter if_condtion]
li = []
for iter_val in iter:
    if if_condtion:            #判断条件
        li.append(iter_val)
print(li)
name = ['Tom', 'Jack', 'Luck']
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])
#[['Tom', 'Python'], ['Tom', 'Java'], ['Tom', 'C'], ['Tom', 'C++'], ['Jack', 'Python'], ['Jack', 'Java'], ['Jack', 'C'], ['Jack', 'C++'], ['Luck', 'Python'], ['Luck', 'Java'], ['Luck', 'C'], ['Luck', 'C++']]

元组

1.有序

2.可重复

3.不可更改

符号使用括号()

定义:

元组的创建

  • 空元组的创建
  • 单元组的创建 tp = (“abc”, )
  • 多元素元组的创建,包含多种数据类型
  • 多元素元组的创建,包含多种数据类型
    • 拼接
    • 重复
    • 索引(偏移) 切片

1.查

  • 索引查
  • 切片查
  • index()
tp = (1, 2, 3, 'a', 'b', ['aa', 'bb', 'cc', 'dd'])
print(tp.index('a'))      #3

2.增 不能

3.改 不能

4.删

不能删除某个元素;但可以将整个元组删除

del tp

最大值、最小值

print(max(tp),min(tp))

遍历

元素遍历

索引遍历

枚举enumerate

上一篇:Big Number


下一篇:HOERBIGER SAM220PC06B B2