# day3 列表和元组

列表

列表使用方括号,每个元素以逗号分隔开

可以使用不同数据类型的数据

特点:

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

1.创建

li=[1,2,2,65,'asd','agh',[1,2,7,'asd']]
print(li)

#[1, 2, 2, 65, 'asd', 'agh', [1, 2, 7, 'asd']]
  • 字符串转换列表:
a="asdg231"
li=list(a)
print(li)

#['a', 's', 'd', 'g', '2', '3', '1']

2.拼接

li=[1,2,3]
li2=[4,5,6]
print(li+li2)

#[1, 2, 3, 4, 5, 6]

3.索引和切片

li=[1,2,3,'asd','4rg']
print(li[2])
print(li[1:3])

#3
#[2, 3]

4.列表的常见操作

增删改查

    • append()(将参数整体作为一个参数插入)

li=[1,2,3,4]
li.append([5,6])
print(li)

#[1, 2, 3, 4, [5,6]]




- extend()(将参数内的元素取出分别加入)

```python
li=[1,2,3,4]li.extend([2,'a'])
print(li)


#[1, 2, 3, 4, 2, 'a']
  • insert()(按照索引值添加但是也是吧参数作为整体插入)
li=[1,2,3,4]
li.insert(2,[5,6])
print(li)

#[1, 2, [5, 6], 3, 4]
    • 直接赋值(索引或者切片)
    li=[1,2,3,4]
    li[0]=5
    li[1:]=[6,7,8]
    print(li)
    
    #[5, 6, 7, 8]
    
    • pop() 删除索引对应的元素,会返回被删除的元素(如果不指定索引默认删除最后一个元素)
    li=[1,2,3,4]
    print(li.pop(2))
    print(li)
    
    #3
    #[1, 2, 4]
    
    • remove() 删除参数值对应的参数(仅删除第一个遍历到的指定元素)
    li=[1,2,3,4,2,2]
    li.remove(2)
    print(li)
    
    #[1, 3, 4, 2, 2]
    
    • del 删除索引值对应的元素(如果不指定索引值将会直接删除整个列表)
    li=[1,2,3,4,2,]
    li2=[1,3,5,6,7]
    del li[3]
    del li2
    print(li)
    print(li2)
    
    #[1, 2, 3, 2]
    #NameError: name 'li2' is not defined
    
    • clear() 直接清空列表
    li=[1,2,3,4,2,]
    li.clear()
    print(li)
    
    #[]
    
    • 索引查
    • 切片查
    • 元素遍历
    li=[1,2,3,4,2,]
    for i in li:
        print(i , end=" ")
        
    #1 2 3 4 2 
    
    • 枚举遍历 enumerate()(对于一个可迭代的/可遍历的对象(例如:list,string)将其组成一个索引苏烈,利用它我们可以同时获得索引值和值)
    li=['a','b','c','d','e','f']
    for i in enumerate(li):
        print(i,end=" ")
        
    #(0, 'a') (1, 'b') (2, 'c') (3, 'd') (4, 'e') (5, 'f') 
    
  • 计数 count()

li=['a','b','c','a','a','f']
print(li.count('a'))

#3
  • 反转 reverse()
li=['a','b','c']
li.reverse()
print(li)
for i in enumerate(li):
    print(i)
    
#['c', 'b', 'a']
#(0, 'c')
#(1, 'b')
#(2, 'a')
  • 排序 按照ASCII码排序(必须是同一种数据类型)
li=['g','f','sd','a','b','c']
li.sort()
print(li)

#['a', 'b', 'c', 'f', 'g', 'sd']

5.运用:

  • 求列表的交集:
li=['a','b','c','d']
li2=['b','c','d','e']
li3=[]
for i in li:
    if i in li2:
        li3.append(i)
print(li3)

#['b', 'c', 'd']
  • input()函数实现往空列表中添加元素,当输入"q"的时候,结束输入,并返回列表。
li=[]
a=''
while a!='q':
    a=input("请输入新元素:")
    li.append(a)
li.pop()
print(li)


#请输入新元素:1
#请输入新元素:2
#请输入新元素:3
#请输入新元素:q
#['1', '2', '3']

  • 随机生成30个0-10的随机整数,并统计每个数出现的次数,返回的结果形式为[[0, 3], [1, 4], … , [10, 5]]
import random
li=[]
li2=[]
for i in range(10):
    li.append(int(random.uniform(0,11)))
for j in range(11):
    li2.append([j,li.count(j)])
print(li2)


#[[0, 0], [1, 1], [2, 0], [3, 0], [4, 1], [5, 1], [6, 0], [7, 2], [8, 2], [9, 3]]

6.深浅拷贝

  • 浅三种实现

    • 切片操作[:]
    li=[1,2,3]
    li2=li[1:]
    print(id(li),id(li2))
    
    #1213327639432 1213327543432
    
    • 工厂函数list(li)
    li=[1,2,3]
    li2=list(li)
    print(id(li),id(li2))
    
    #2270299783880 2270299704328
    
    • copy模块内的copy函数
    import copy
    li=[1,2,3]
    li2=copy.copy(li)
    print(li2)
    print(id(li),id(li2))
    
    #[1, 2, 3]
    #2224624001608 2224624001672
    
  • 深拷贝(会连列表地址块中的元素地址也拷贝)

import copy
li=[1,2,3,[1,2]]
li2=copy.deepcopy(li)
print(id(li),id(li2))
print(id(li[2]),id(li2[2]))

#2563960737032 2563960957000
#140708840133728 140708840133728

7.列表生成式

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

  • 格式:

[表达式 for 迭代元素 in 可迭代对象]
print([x for x in range(10) if x%2==0])

#[0, 2, 4, 6, 8]

三目运算:

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

#9

元组

符号的使用()

元组元素不可修改

1.创建

  • 空元组的创建(不能添加元素)
tu=()
print(tu)

#()
  • 单元素元组的创建(需要在单元素后面添加逗号)
tu=(1,)
print(tu)

#(1,)
  • 多元素元组的创建,包含多种数据类型
tu=(1,2,'2','3',['a',1],(3,4))
print(tu)

#(1, 2, '2', '3', ['a', 1], (3, 4))

2.拼接

tu=(1,2,3)
tu2=(2,3,4)
print(tu+tu2)

#(1, 2, 3, 2, 3, 4)

3.重复

tu2=(2,3,4)
print(tu2*3)

#(2, 3, 4, 2, 3, 4, 2, 3, 4)

4.索引和切片

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

#3
#(4, 5, 6, 7)

元组不可以修改元素,但是对于可变数据类型元素可以更改其内部元素(即元组元素的内存地址不改变):

tu=(1,2,3,4,5,6,[1,3,6,'asd'])
print(tu)
tu[6][2]='sda'
print(tu)


#(1, 2, 3, 4, 5, 6, [1, 3, 6, 'asd'])
#(1, 2, 3, 4, 5, 6, [1, 3, 'sda', 'asd'])

5.元组常见操作

查询:

  • 索引查
  • 切片查
  • index() 查询元组中以遍历到的与关键字相同的元素(不能查询元素内部的元素)
tu=(1,2,3,4,'a',6,[1,3,6,'asd'])
print(tu.index('a'))

#4

删除:

  • del (只能整个删除元组不能删除部分)
tu=(1,2,3,4,'a',6,[1,3,6,'asd'])
print(tu)
del tu
print(tu)

#(1, 2, 3, 4, 'a', 6, [1, 3, 6, 'asd'])
#NameError: name 'tu' is not defined

最大值最小值(全部元素要统一类型)

tu=(1,2,3,4,5,6,7,8,9)
print(max(tu),min(tu))


#9 1

遍历:

  • 元素遍历
tu=(1,2,3,4,5,6,7,8,9)
for i in tu:
    print(i ,end=" ")
    
    
#1 2 3 4 5 6 7 8 9 
  • 索引遍历
tu=(1,2,3,4,5,6,7,8,9)
for i in range(len(tu)):
    print(tu[i] ,end=" ")
  

#1 2 3 4 5 6 7 8 9 
  • 枚举遍历 enumerate
tu=('a','b','c','d','e')
for i in enumerate(tu):
    print(i,end=" ")
    
    
#(0, 'a') (1, 'b') (2, 'c') (3, 'd') (4, 'e') 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值