python基础day4

一.容器

1.Python列表(list)

Python 支持多种复合数据类型,可将不同值组合在一起。最常用的列表 ,是用方括号标注,逗号分隔的一组值。列表可以包含不同类型的元素,但一般情况下,各个元素的类型相同

  • 列表是一种可以存储任意个各种类型的序列容器

  • 列表内的数据有先后顺序关系

  • 列表是可变的容器

  • >>> L = []     # 创建一个空的列表
    >>> L = ['北京', '上海', '广州', '西安']  # 创建一个含有4个字符串的列表
    >>> L = [1, 'Two', 3.14, True, False, None]
    >>> L = [1, 2, [3.1, 3.2], 4]   #  含有四个元素的列表,第三个元素是列表
    >>> L2 = [
        ['姓名','语文成绩','数学成绩'],
        ['小王', 90, 100],
        ['牛犇', 59, 26]
    ]

  • ①列表的运算

  • + 用于拼接列表
  • L1 = [1,2,3]
    L2 = ["A","B","C"]
    print(L1+L2) 
    
    
    
    [1, 2, 3, 'A', 'B', 'C']
    

    += 追加

  • L1 = [1,2,3]
    L1 +='adsa'
    print(L1)
    
    [1, 2, 3, 'a', 'd', 's', 'a']

    * 用于生产重复的列表

  • L1 = [1,2,3]
    L2 = 3*L1
    print(L2)
    
    
    
    
    [1, 2, 3, 1, 2, 3, 1, 2, 3]

    == != 用于比较

  • print([1,2,3]==[1,2,3])
    print([1,2]!=[2])
    
    
    
    True
    True

    in /not in 用于判断一个数据元素是否在列表中

  • l1 = ['zhansan','lisi']
    print('zhansan'in l1)
    print('lisi' not in l1)
    
    
    
    True
    False

    ②.访问列表中的值

  • 2.1正向索引
  • l1 = [1,2,3]
    print(l1[0])
    print(l1[1])
    
    
    
    1
    2

    与字符串的索引一样,列表索引从 0 开始,第二个索引是 1,依此类推。

  • 2.2 反向索引
  • l1 = [1,2,3]
    print(l1[-1])
    print(l1[-2])
    
    
    
    3
    2

    索引也可以从尾部开始,最后一个元素的索引为 -1,往前一位为 -2,以此类推

  • 2.3 切片
  • 列表[(开始索引b):(终止索引e)(: (步长s))]
  • l1 = [1,2,3,4,5,6,7,8,9]
    print(l1[0:4])
    print(l1[::-1])            # 反向切片
    print(l1[::2])             # 取奇数
    
    
    
    
    [1, 2, 3, 4]
    [9, 8, 7, 6, 5, 4, 3, 2, 1]
    [1, 3, 5, 7, 9]

    ③列表的数据操作(增、删、改、查)

  • 3.1 添加数据(增)
    方法说明
    L.append(x)向列表的末尾追加单个数据
    L.insert(index, obj)将某个数据obj 插入到 index这个索引位置的数据之前
    L.extend(可迭代对象)等同于: L += 可迭代对象,如列表、元组、字符串、集合等
    l1 = [1,3,5]
    l1.append(6)
    print(l1)
    
    l1.insert(1,2)
    print(l1)
    
    l1.extend(range(7,10))
    print(l1)
    
    
    
    
    [1, 3, 5, 6]
    [1, 2, 3, 5, 6]
    [1, 2, 3, 5, 6, 7, 8, 9]
    3.2 修改数据 (改)
  • 用索引赋值可以改变列表内的数据
  • l1 = [1,3,5]
    l1[2]=7
    print(l1)
    
    
    [1, 3, 7]
    3.3 删除数据 (删)
    方法说明
    L.remove(x)从列表L中删除第一次出现在列表中的数据元素,如果x不存在则报错
    L.pop()根据索引删除元素,并返回该元素。若不提供索引,默认删除最后一个元素
    L.clear()清空列表
    l1 = [1,2,2,3]
    l1 .remove(2)
    print(l1)
    
    l1.pop()
    print(l1)
    l1.pop(1)
    print(l1)
    
    l1 = ['zhangsan','lisi','wangwu']
    l1.clear()
    print(l1)
    
    
    [1, 2, 3]
    [1, 2]
    [1]
    []

    del 语句删除指定位置的数据元素

  • l1=[12,2]
    del l1[0]
    print(l1)
    del l1
    print(l1)
    
    
    
    [2]
    
    NameError: name 'l1' is not defined

    ④.嵌套列表

  • 使用嵌套列表即在列表里创建其它列表
  • ​​​​​​​a = ['a', 'b', 'c']
    n = [1, 2, 3]
    x = [a, n]
    print(x)#[['a', 'b', 'c'], [1, 2, 3]]
    print(x[0])#['a', 'b', 'c']
    print(x[0][1])#b
  • ⑤.Python列表常用API

    ​​​​​​​
    序号函数
    1len(list)列表元素个数
    2max(list)返回列表元素最大值
    3min(list)返回列表元素最小值
    4list(seq)将元组转换为列表
    ​​​​​​​
    列表的常用方法
    运算结果
    s.index(x[, i[, j]])xs 中首次出现项的索引号(索引号在 i 或其后且在 j 之前)
    s.count(x)xs 中出现的总次数
    s.append(x)x 添加到序列的末尾 (等同于 s[len(s):len(s)] = [x])
    s.clear()s 中移除所有项 (等同于 del s[:])
    s.copy()创建 s 的浅拷贝 (等同于 s[:])
    s.extend(t)s += tt 的内容扩展 s (基本上等同于 s[len(s):len(s)] = t)
    s.insert(i, x)在由 i 给出的索引位置将 x 插入 s (等同于 s[i:i] = [x])
    s.pop([i])提取在 i 位置上的项,并将其从 s 中移除
    s.remove(x)删除 s 中第一个 s[i] 等于 x 的项目。
    s.reverse()就地将列表中的元素逆序。
    s.sort( key=None, *reverse=False*)对列表内的数据进行排序, reverse=False 升序排序,否则是降序排序
    ​​​​​​​

    2.Python元组(tuple)

  • 元组是不可改变的列表

  • 同列表list 一样,元组可以存放任意类型的数据

  • 但是,一旦创建将不可修改,包括添加、删除或更改其中的元素

  • 元组使用小括号 ( ),列表使用方括号 [ ]

1.元组的创建

用小括号() 括起来,单个元素括起来后加逗号来区分单个元素还是元组

创建元组的函数 tuple

tu = (1,2,'as')
print(tu)
tu1 = tuple(range(1,4,2))
print(tu1)


(1, 2, 'as')
(1, 3)

2.元组的数据操作(删,查,运算)

2.1 删除元组

元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组

tup = ('openAI', 'hqyj', 100, 200) 
print (tup)
del tup
print (tup)#name 'tup' is not defined
2.2 查看元组

元组与字符串类似,下标索引从 0 开始,可以进行截取,组合等。

tup1 = ('python', 'hqyj', 100, 200)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print (tup1[0])#python
print (tup2[1:5])#(2, 3, 4, 5)
print (tup2[:4])#(1, 2, 3, 4)
print (tup2[2:])#(3, 4, 5, 6, 7)



python
(2, 3, 4, 5)
(1, 2, 3, 4)
(3, 4, 5, 6, 7)
2.3 元组的运算

元组中的元素值是不允许修改的,但我们可以对元组进行连接组合

tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 创建一个新的元组
tup3 = tup1 + tup2
print (tup3)

(12, 34.56, 'abc', 'xyz')

3.元组不可变

所谓元组的不可变指的是元组所指向的内存中的内容不可变。

tup = (1, 2, 3, 4, 5, 6, 7)
tup[1] = 100
print(tup)#报错'tuple' object does not support item assignment

4.元组常用API

序号方法描述
1len(tuple)返回元组中元素个数。
2max(tuple)返回元组中元素最大值。
3min(tuple)返回元组中元素最小值。
4tuple(list)将列表转换为元组。
运算结果
s.index(x[, i[, j]])元素xs 中首次出现项的索引号,i(可选):搜索的起始索引。如果省略,将从元组的开头开始搜索,j(可选):搜索的结束索引。如果省略,将搜索到元组的末尾
s.count(x)xs 中出现的总次数

3.Python字典(dict )

  • 字典是一种可变容器模型,且可存储任意类型对象。

  • 字典的数据都是以键(key)-值(value)对的形式进行映射存储.

  • 字典的每个键值对( key:value )用冒号分割,每个对之间用逗号分割,整个字典包括在花括号 {} 中

  • d = {key1 : value1, key2 : value2, key3 : value3 }

  • 字典的数据在Python 3.7及更高版本中,字典是有序的;3.6之前的版本中,字典是无序的

  • 字典的键不能重复,且只能用不可变类型作为字典的键

  • 字典中的数据只能用"键"key 进行索引,不能用整数进行索引

1.字典的创建

  • 创建字典的字面值:

字典的表示方式以 {} 括起来, 以英文的冒号 (:) 分隔键值对,各键值对之间用逗号(,)分隔

d = {}    # 创建空字典
d = {'name': "weimingze", "age": 35}
d = {'a': [1, 2, 3]}
d = {'b': {"bb": 222}}
d = {1:'壹', 2:'贰', 5:'伍'}
d = {(1, 2, 3):'壹贰伍'}

以下写法会存在问题

  • 键必须是唯一的,但值则不必。

  • 值可以取任何数据类型,但键必须是不可变的,如字符串,数字。

d = {'a': 1, 'b': 2, 'a': 3}  # 字典的键不能重复 d = {'a': 3, 'b': 2}  
d = {[1, 2, 3]: 'a'}          # 不能用可变类型作为字典的键  # 报错

  字典[键key] = 表达式

  • 2.字典的数据操作(增、删、改、查)

    2.1 增加和修改字典
  • 添加和修改字典的元素

    • 语法

  • 键不存在, 会创建键并绑定键对应的值

    键存在, 会改变键对应的值

  • dic = {'a':12,'b':13,'c':14,'a':15}
    print(dic)
    dic['a']=15
    print(dic)
    dic['d']=10
    print(dic)
    
    
    
    {'a': 15, 'b': 13, 'c': 14}
    {'a': 15, 'b': 13, 'c': 14}
    {'a': 15, 'b': 13, 'c': 14, 'd': 10}
    2.2 访问字典里的值
    ​​​​​​​用键索引可以查看字典中的数据
  • 如果用字典里没有的键访问数据,会输出错误
dic = {'a':12,'b':13,'c':14,'a':15}
print(dic['a'])
print(dic['d'])



KeyError: 'd'
15
2.3 删除字典元素

能删单一的元素也能清空字典,清空只需一项操作

显式删除一个字典用del命令

#删除指定的键
d = dict(a=1, b=2, c=3)
del d['a']
print(d)

{'b': 2, 'c': 3}

#删除指定的键,并且返回其值
d = dict(a=1, b=2, c=3)
print(d.pop('c'))

3

#删除并返回最后一个键值对
d = dict(a=1, b=2, c=3)
print(d.popitem())

('c', 3)

#删除字典所以项
d = dict(a=1, b=2, c=3)
d.clear()
print(d)

{}

#删除字典
d = dict(a=1, b=2, c=3)
del d
print(d)

NameError: name 'd' is not defined

3.字典的特性

字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。

1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住

mydic = {'Name': 'jack', 'Age': 27, 'Name': 'karen'}
print (mydic['Name'])

karen

2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表等就不行

注: python 中有四种可变类型

  1. 列表 list

  2. 字典dict

  3. 集合 set

  4. 字节数组 bytearray

字典是可迭代对象, 字典只能对所有的键进行迭代访问,默认访问键

可以使用 for 循环来遍历字典的键和值。可以使用 dict.keys() 方法遍历键,使用 dict.values() 方法遍历值,使用 dict.items() 方法同时遍历键和值。

my_dict = {'a':1, 'b':2, 'c':3}
for key in my_dict:
    print(key, my_dict[key])


a 1
b 2
c 3

4.字典常用API

序号函数描述
1len(dict)计算字典元素个数,即键的总数。
2str(dict)输出字典,可以打印的字符串表示。
3type(variable)返回输入的变量类型,如果变
1dict.clear()删除字典内所有元素
2dict.copy()返回一个字典的浅复制
3dict.fromkeys(seq)创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值,如果未提供,则所有键的值将被设置为 None
4dict.get(key, default=None)返回指定键的值,如果键不在字典中返回 default 设置的默认值
5key in dict如果键在字典dict里返回true,否则返回false
6dict.items()以列表返回一个视图对象
7dict.keys()返回一个视图对象
8dict.setdefault(key, default=None)和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9dict.update(dict2)把字典dict2的键/值对更新到dict里
10dict.values()返回一个视图对象
11pop(key,default)删除字典 key(键)所对应的值,返回被删除的值。
12popitem()返回并删除字典中的最后一对键和值。
org_data = dict(a=3,b=[12,13,14],c=5)
cp_data = org_data.copy()
org_data['b'].append(15)
org_data['a']=4
print(org_data)
print(cp_data)

# 修改原始字典中的可变对象
# 对于可变对象(如列表、字典),修改原始字典中的值会影响浅复制的字典,因为它们引用的是同一个对象
# 对于不可变对象(如整数、字符串、元组),修改原始字典中的值不会影响浅复制的字典。

{'a': 4, 'b': [12, 13, 14, 15], 'c': 5}
{'a': 3, 'b': [12, 13, 14, 15], 'c': 5}
key = ['a','b','c']
value = [1,2,3]
dic = dict.fromkeys(key,value)
print(dic)



{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}

5.列表、元组、字典小结

  1. 列表和元组是有序的,字典的存储在Python3.7以后是有序的

  2. 列表、字典是可变的,元组是不可变的

  3. 字典的键索引速度快,列表的索引速度也快

​​​​​​​

4.集合set/ 固定集合 frozenset

  • 集合是可变的容器,固定集合是不可变的集合

  • 集合相当于只有键没有值的字典

  • 集合是无序的不重复元素的存储结构

  • 集合内的数据都是唯一的,不可变的

1.集合的创建

  • 创建集合的方式

    空集合 set()

    非空集合 用 {} 括起来,值用逗号分隔开

s = set()            # 用函数空集合
s = {1, 2, 3, 4}     # 创建非空集合的字面值
s = set(range(5))    # 调用 set(可迭代对象) 来创建集合 s = {0, 1, 2, 3, 4}
s = set("ABC")       # s = {'B', 'C', 'A'}
s = set("ABCCCCCCC")  # s = {'B', 'C', 'A'}
s = set(['ABC'])      # s = {'ABC'} 使用 set()函数从列表创建集合
s = set((4, 5, 6, 7))# 使用 set()函数从元组创建集合




#创建固定集合frozensets的方式

fs = frozenset()              # 空固定集合 fs = frozenset()
fs = frozenset([1, 2, 3])     # fs =  frozenset({1, 2, 3})

2.集合的数据操作(增、删)

2.1 添加元素

将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。

s.add( x ) 添加元素到集合

s.update( x ) 添加元素到集合,且参数可以是列表,元组,字典等 ,x 可以有多个,用逗号分开

s1 = set((1,2,3))
print(s1)
s1.add(4)
s1.update([4,5,6])
print(s1)


{1, 2, 3}
{1, 2, 3, 4, 5, 6}
2.2 删除元素

s.remove( x ):将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。

s.discard( x )):将元素 x 从集合 s 中移除,如果元素不存在,不会发生错误。

s.pop()):对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除。

s1 = set((3,2,9,4))
s1.remove(4)
s1.discard(5)
print(s1)
s1.pop()
print(s1)



{9, 2, 3}
{2, 3}

注意:集合(set)没有索引查看的功能。集合是一种无序、不可重复的数据结构,用于存储唯一的元素。由于集合是无序的,所以不能通过索引来访问其中的元素。所以也没有对应的修改功能

3.集合内置方法常用API

集合的方法

方法描述
add()为集合添加元素
clear()移除集合中的所有元素
copy()拷贝一个集合
difference()返回多个集合的差集,返回一个新集合
difference_update()移除集合中的元素,该元素在指定的集合也存在。直接修改第一个集合
discard()删除集合中指定的元素
intersection()返回集合的交集,返回一个新集合
intersection_update()返回集合的交集。直接修改第一个集合
isdisjoint()判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
issubset()判断指定集合是否为该方法参数集合的子集。
issuperset()判断该方法的参数集合是否为指定集合的子集
pop()随机移除元素
remove()移除指定元素
symmetric_difference()返回两个集合中不重复的元素集合。
symmetric_difference_update()移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
union()返回两个集合的并集
update()给集合添加元素
len()计算集合元素个数

5.Python推导式

Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。

Python 支持各种数据结构的推导式:

  • 列表(list)推导式

  • 字典(dict)推导式

  • 集合(set)推导式

  • 元组(tuple)推导式

1.列表推导式

  • 作用

    用简单的表达式方式来创建列表

  • 语法规则

[ 表达式 for 自定义变量 in 可迭代对象 ]
# 或
[ 表达式 for 自定义变量 in 可迭代对象 if 真值表达式 ]

l = [x*2 for x in range(10)]
print(l)


[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

2.字典推导式

字典推导基本格式:

  • { 键表达式: 值表达式 for 元素 in 集合 }

  • { 键表达式: 值表达式 for 元素 in 集合 if 条件 }

# 将列表中各字符串值为键,各字符串的长度为值,组成键值对
lis = ['lisi','zhangsan','lisa']
dic = {key:len(key) for key in lis}
print(dic)


{'lisi': 4, 'zhangsan': 8, 'lisa': 4}

3.集合推导式

集合推导式基本格式:

  • { 表达式 for 元素 in 序列 }

  • { 表达式 for 元素 in 序列 if 条件 }

#计算数字 1,2,3 的平方数:

se1 = {key**2 for key in (1,2,3)}
print(se1)


{1, 4, 9}

4.元组推导式

元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组。

元组推导式和列表推导式的用法也完全相同,只是元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是中括号 [],另外元组推导式返回的结果是一个生成器对象。

元组推导式基本格式:

  • (表达式 for 元素 in 序列 )

  • (表达式 for 元素 in 序列 if 条件 )

#生成一个包含数字 1~9 的元组
tu = (v for v in range(1,10))
print(tuple(tu))


(1, 2, 3, 4, 5, 6, 7, 8, 9)

​​​​​​​

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值