Python基础知识七 元组&字典&集合

一、元组

1、元组的概念

  • 元组 tuple,是一个不可变序列
  • 一般情况下如果不希望数据改变的时候就用元组,其余情况都用列表
my_tuple = (1,2,3,4,5)
print(my_tuple,type(my_tuple))    # (1, 2, 3, 4, 5) <class 'tuple'>
my_tuple[3] = 8    # TypeError: 'tuple' object does not support item assignment
  • 当元组中只有一个元素时,元素后面应该要加一个逗号,这样才能成为元组。
a_tuple = (1)
print(a_tuple,type(a_tuple))    # 1 <class 'int'>

a_tuple = (1,)
print(a_tuple,type(a_tuple))    # (1,) <class 'tuple'>

2、元组的解包

  • 元组的解包指将元组当中的每一个元素都赋值给一个变量。
  • 在对一个元祖解包的时候,变量的数量要和元组中元素的数量保持一致。
  • 如果变量的数量和元素的数量不一致,也可以在变量前面加上一个 星号*。这样会获取元组中剩余的元素,并以列表的形式返回。
  • 任何可迭代对象都支持解包,可迭代对象包括元组、列表、字典、集合、字符串、生成器等。
my_tuple = 1,2,3,4,5
print(my_tuple, type(my_tuple))    # (1, 2, 3, 4, 5) <class 'tuple'>

a,b,*c = my_tuple
print('a =',a)    # a = 1
print('b =',b)    # b = 2
print('c =',c)    # c = [3, 4, 5]

a,*b,c = my_tuple
print('a =',a)    # a = 1
print('b =',b)    # b = [2, 3, 4]
print('c =',c)    # c = 5

*a,b,c = my_tuple
print('a =',a)    # a = [1, 2, 3]
print('b =',b)    # b = 4
print('c =',c)    # c = 5

*a,*b,c = my_tuple    # SyntaxError: two starred expressions in assignment
print('a =',a)
print('b =',b)
print('c =',c)

a,b,*c = 'hello python'
print('a =',a)    # a = h
print('b =',b)    # b = e
print('c =',c)    # c = ['l', 'l', 'o', ' ', 'p', 'y', 't', 'h', 'o', 'n']

a,b,*c = [1,2,3,4,5,6]
print('a =',a)    # a = 1
print('b =',b)    # b = 2
print('c =',c)    # c = [3, 4, 5, 6]

二、字典

1、字典的概念

  • 字典 dict,映射(mapping)类型的数据结构。
  • 字典的作用其实和列表类似,是用来存储对象的容器。
  • 列表存储数据的性能非常好,但是查询数据的性能很差。而字典正好相反。
  • 在字典当中每一个元素都有唯一的一个名字,通过这个名字可以快速查询到指定的元素。
  • 这个唯一的名字我们一般称之为键 key,通过 key 我们可以查询到 value 值。
  • 所以字典我们也称之为 键值对(key-value)。
  • 每个字典当中可以有多个键值对,每一个键值对我们可以称之为一项(item)。
  • 字典中的键是不能重复的,如果重复后面的会替换前面的。

2、语法

  • 语法: {key:value,key:value…}
d = {'name':'钢铁侠','age':38,'sex':'男'}
# 需要根据键来获取值
print(d['name'],d['age'],d['sex'])    # 钢铁侠 38 男

3、字典的使用

3.1 创建字典

  • 使用dict()函数来创建字典
d = dict(name='钢铁侠',age=35,sex='男')
print(d,type(d))    # {'name': '钢铁侠', 'age': 35, 'sex': '男'} <class 'dict'>
  • dict()函数也可以将一个包含有双值子序列转换为字典
    • 双值序列:序列中有2个值。例如 [1,2]、(‘b’,‘a’)、‘ab’
    • 子序列:如果序列中的元素也是序列,那么我们就称这个元素为子序列。例如 [(1,2),(3,4)]
d = dict([('name','钢铁侠'),('age',35)])
print(d,type(d))    # {'name': '钢铁侠', 'age': 35} <class 'dict'>

3.2 len()

  • len() 获取字典中键值对的个数
d = {'name':'钢铁侠','age':38,'sex':'男'}
print(len(d))    # 3

3.3 in、not in

  • in 检查字典中是否包含指定的键,返回True / False
  • not in 检查字典中是否不包含指定的键
d = {'name':'钢铁侠','age':38,'sex':'男'}
print('name' not in d)    # False

3.4 获取字典中的值

3.4.1 根据键获取字典中的值
  • 语法:d[key]
d = {'name':'钢铁侠','age':38,'sex':'男'}
print(d['age'])    # 38
3.4.2 用get方法获取字典中的值
  • 语法:字典名.get(key,[default])
  • 如果字典当中没有这个Key值,会返回一个None;
  • 也可以指定一个默认值来作为第二个参数,这样获取不到Key值的时候就返回默认值。
d = {'name':'钢铁侠','age':38,'sex':'男'}
print(d.get('age'))    # 38
print(d.get('job'))    # None
print(d.get('birthday','这个key值不存在'))    # 这个key值不存在

3.5 修改字典

3.5.1 d[key] = value
  • 修改字典中的key-value
d = {'name':'钢铁侠','age':38,'sex':'男'}
d['name'] = '葫芦娃'
print(d)    # {'name': '葫芦娃', 'age': 38, 'sex': '男'}
  • 向字典中添加key-value
d = {'name':'钢铁侠','age':38,'sex':'男'}
d['phone'] = '12345678'
print(d)    # {'name': '钢铁侠', 'age': 38, 'sex': '男', 'phone': '12345678'}
3.5.2 setdefault(key,[default])
  • 向字典中添加 key-value
  • 如果这个key已经存在于字典当中,则返回key值,不会对字典有任何的影响;
  • 如果Key不存在,则向字典中添加这个key,并设置value。
d = {'name':'钢铁侠','age':38,'sex':'男'}
result = d.setdefault('name','葫芦娃')
print(result)    # 钢铁侠
print(d)    # {'name': '钢铁侠', 'age': 38, 'sex': '男'}

d = {'name':'钢铁侠','age':38,'sex':'男'}
result = d.setdefault('hello','葫芦娃')
print(result)    # 葫芦娃
print(d)    # {'name': '钢铁侠', 'age': 38, 'sex': '男', 'hello': '葫芦娃'}
3.5.3 update( )
  • 将其他字典当中的key-value添加到当前字典当中
d1 = {'a':1,'b':2,'c':3}
d2 = {'d':4,'e':5,'f':6}
d1.update(d2)
print(d1)    # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
print(d2)    # {'d': 4, 'e': 5, 'f': 6}

3.6 删除

3.6.1 del
  • 删除字典中的一对key-value
d1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
del d1['a']
del d1['b']
print(d1)    # {'c': 3, 'd': 4, 'e': 5, 'f': 6}
3.6.2 popitem( )
  • 随机删除一个键值对,一般都会删除最后一个
  • 它会将删除之后的键值对作为返回值返回。返回的是一个元组, 元组中有2个元素:第一个元素是删除的key,第二个元素是删除的value。
d1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
result = d1.popitem()
print(result)    # ('f', 6)
print(d1)    # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
3.6.3 pop(key,[default])
  • 根据key来删除 key-value
d1 = {'c': 3, 'd': 4, 'e': 5}
result = d1.pop('b','这个key值不存在')
print(result)    # 这个key值不存在
print(d1)    # {'c': 3, 'd': 4, 'e': 5}
result = d1.pop('c')
print(result)    # 3
print(d1)    # {'d': 4, 'e': 5}
3.6.4 clear( )
  • 清空字典
d1 = {'c': 3, 'd': 4, 'e': 5}
d1.clear()
print(d1)    # {}

3.7 copy( )

  • copy( )用于对字典进行一个浅复制。
  • 浅复制只会复制字典的本身,如果字典中还有字典,是不会被复制的。
  • 复制以后的对象,和原对象是独立的。修改一个不会影响另一个。
d = {'a':{'name':'黑猫警长','age':18},'b':2,'c':3}
d1 = d
print('d =',d,id(d))  # d = {'a': {'name': '黑猫警长', 'age': 18}, 'b': 2, 'c': 3} 3039239036648
print('d1 =',d1,id(d1))  # d1 = {'a': {'name': '黑猫警长', 'age': 18}, 'b': 2, 'c': 3} 3039239036648

d1['b'] = 20
print('d =',d,id(d))  # d = {'a': {'name': '黑猫警长', 'age': 18}, 'b': 20, 'c': 3} 3039239036648
print('d1 =',d1,id(d1))  # d1 = {'a': {'name': '黑猫警长', 'age': 18}, 'b': 20, 'c': 3} 3039239036648

d1['a']['name'] = '皮卡丘'
print('d =',d,id(d))  # d = {'a': {'name': '皮卡丘', 'age': 18}, 'b': 20, 'c': 3} 3039239036648
print('d1 =',d1,id(d1))  # d1 = {'a': {'name': '皮卡丘', 'age': 18}, 'b': 20, 'c': 3} 3039239036648
d = {'a':{'name':'黑猫警长','age':18},'b':2,'c':3}
d2 = d.copy()
print('d =',d,id(d))  # d = {'a': {'name': '黑猫警长', 'age': 18}, 'b': 2, 'c': 3} 2039041318632
print('d2 =',d2,id(d2))  # d2 = {'a': {'name': '黑猫警长', 'age': 18}, 'b': 2, 'c': 3} 2039041347728

d2['b'] = 20
print('d =',d,id(d))  # d = {'a': {'name': '黑猫警长', 'age': 18}, 'b': 2, 'c': 3} 2039041318632
print('d2 =',d2,id(d2))  # d2 = {'a': {'name': '黑猫警长', 'age': 18}, 'b': 20, 'c': 3} 2039041347728

d2['a']['name'] = '皮卡丘'
print('d =',d,id(d))  # d = {'a': {'name': '皮卡丘', 'age': 18}, 'b': 2, 'c': 3} 2039041318632
print('d2 =',d2,id(d2))  # d2 = {'a': {'name': '皮卡丘', 'age': 18}, 'b': 20, 'c': 3} 2039041347728
# 修改d2中‘a’对应的字典,d中的字典也变了,说明字典{'name': '皮卡丘', 'age': 18}没有被复制。

4、遍历字典

4.1 keys( )

  • 该方法返回的是一个序列,保存的是字典中所有的键。
d = {'name':'钢铁侠','age':38,'sex':'男'}
print(d.keys())    # dict_keys(['name', 'age', 'sex'])
list_keys = []
for k in d.keys():
    list_keys.append(k)
print(list_keys)    # ['name', 'age', 'sex']

4.2 values( )

  • 该方法返回的是一个序列,保存的是字典中所有的值。
d = {'name':'钢铁侠','age':38,'sex':'男'}
print(d.values())    # dict_values(['钢铁侠', 38, '男'])
list_values = []
for k in d.values():
    list_values.append(k)
print(list_values)    # ['钢铁侠', 38, '男']

4.3 items( )

  • 该方法返回的是一个序列,保存的是字典中所有的项。
  • 这个序列当中包含有双值子序列,双值就是字典中的key-value。
d = {'name':'钢铁侠','age':38,'sex':'男'}
print(d.items())
for k,v in d.items():
    print(k,'=',v)
# 运行结果:
# dict_items([('name', '钢铁侠'), ('age', 38), ('sex', '男')])
# name = 钢铁侠
# age = 38
# sex = 男

三、集合

1、集合的概念

集合 set 和列表非常相似,但也有不同点:

  • 1 集合中只能存储不可变对象
  • 2 集合中存储的对象是无序的
  • 3 集合中不能出现重复的元素
# 集合中只能存储不可变对象
s = {[1,2,3],[4,5,6]}    # TypeError: unhashable type: 'list'
print(s,type(s))
# 集合中存储的对象是无序的
s = {'a','b',1,2,3}
print(s[0])    # TypeError: 'set' object does not support indexing
# 集合中不能出现重复的元素
s = {2,3,1,4,2,2,3,1}
print(s,type(s))    # {1, 2, 3, 4} <class 'set'>
s = {}
print(s,type(s))    # {} <class 'dict'>

s = {1,2,3}
print(s,type(s))    # {1, 2, 3} <class 'set'>

# set() 可以将序列和字典转换为集合
s = set()
print(s,type(s))    # set() <class 'set'>

s = set([4,2,1,5,3,1,2,3,5,5])
print(s,type(s))    # {1, 2, 3, 4, 5} <class 'set'>

s = set('hello')
print(s,type(s))    # {'h', 'o', 'e', 'l'} <class 'set'>

# 使用set()函数将字典转换为集合的时候,只会包含字典中的键
s = set({'a':1,'b':2,'c':3})
print(s,type(s))    # {'a', 'c', 'b'} <class 'set'>

s = {'a','b',1,2,3}
print(s,type(s))    # {1, 2, 3, 'b', 'a'} <class 'set'>
a = list(s)
print(a,type(a))    # [1, 2, 3, 'b', 'a'] <class 'list'>

2、集合的使用

2.1 in 和 not in

s = {'a','b',1,2,3}
print('a' in s)    # True
print('a' not in s)    # False

2.2 len( )

  • 获取集合的长度(即集合内元素的个数)
s = {'a','b',1,2,3}
print(len(s))     # 5

2.3 add( )

  • 向集合中添加元素
s = {'a','b',1,2,3}
s.add(4)
print(s)    # {1, 2, 3, 4, 'a', 'b'}

2.4 update( )

  • 将一个集合中的元素添加到另一个集合中
s = {'a','b',1,2,3}
s2 = set('hello')
s.update(s2)
print(s)    # {'b', 2, 3, 1, 'h', 'o', 'e', 'l', 'a'}
print(s2)    # {'l', 'h', 'o', 'e'}

2.5 pop( )

  • 删除集合中的一个元素
s = {'a','b',1,2,3}
r = s.pop()
print(s)    # {1, 2, 3, 'a'}
print(r)    # b

2.6 remove( )

  • 删除集合中指定的元素
s = {'a','b',1,2,3}
s.remove('a')
print(s)    # {1, 2, 3, 'b'}

2.7 clear( )

  • 清空集合中的元素
s = {'a','b',1,2,3}
s.clear()
print(s)    # set()

3、集合的运算

3.1 交集运算 &

s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}
r = s1 & s2
print(r)    # {3, 4, 5}

3.2 并集运算 |

s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}
r = s1 | s2
print(r)    # {1, 2, 3, 4, 5, 6, 7}

3.3 差集运算 -

s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}
r1 = s1 - s2
print(r1)    # {1, 2}
r2 = s2 - s1
print(r2)    # {6, 7}

3.4 异或集运算 ^

  • 集合里面不相交的部分
s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}
r = s1 ^ s2
print(r)    # {1, 2, 6, 7}

3.5 比较运算

  • 返回的是布尔类型
  • <= 检查一个集合是否是另一个集合的子集
  • < 检查一个集合是否是另一个集合的真子集
  • >= 检查一个集合是否是另一个集合的超集
  • > 检查一个集合是否是另一个集合的真超集
a = {1,2,3}
b = {1,2,3,4,5}
c = {1,2,3}
r1 = a <= b
print(r1)    # True
r2 = a < b
print(r2)    # True
r3 = a < c
print(r3)    # False

四、可变对象

  • 每个对象都保存了三个数据:
    • 1.id(标识)
    • 2.type(类型)
    • 3.value(值)
  • a = [1,2,3] 列表就是一个可变对象
  • a[0] = 10 (改的是对象里面的value)
    • 这个操作是在通过变量去修改对象里面的值
    • 这个操作不会改变变量所指向的对象
  • a = [4,5,6] (改的是变量)
    • 这个操作是在给变量重新赋值
    • 这个操作会让变量指向新的对象
a = [1,2,3]
print('修改前',a,id(a))    # 修改前 [1, 2, 3] 2537002821000
a[0] = 10
print('修改后',a,id(a))    # 修改后 [10, 2, 3] 2537002821000
a = [1,2,3]
print('修改前',a,id(a))    # 修改前 [1, 2, 3] 1669417788296
a = [4,5,6]
print('修改后',a,id(a))    # 修改后 [4, 5, 6] 1669417788808
a = [1,2,3]
b = a
b[0] = 10
print('a',a,id(a))    # a [10, 2, 3] 2114062766984
print('b',b,id(b))    # b [10, 2, 3] 2114062766984
a = [1,2,3]
b = a
b = [7,8,9]
print('a',a,id(a))    # a [1, 2, 3] 1662926902152
print('b',b,id(b))    # b [7, 8, 9] 1662926901640
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 列表是Python中最常用的数据类型之一,它可以存储多个元素,这些元素可以是不同的数据类型,如整数、浮点数、字符串等。列表使用方括号 [] 来表示,元素之间用逗号隔开。 例如,下面是一个包含整数、浮点数和字符串的列表: ``` my_list = [1, 2.5, "hello"] ``` 列表中的元素可以通过索引访问,索引从开始,例如: ``` print(my_list[]) # 输出 1 print(my_list[2]) # 输出 "hello" ``` 列表还支持切片操作,可以通过切片获取列表的子集,例如: ``` print(my_list[1:]) # 输出 [2.5, "hello"] ``` 列表是可变的,可以通过索引或切片修改列表中的元素,也可以使用 append() 方法向列表末尾添加新元素,例如: ``` my_list[] = 3 my_list.append("world") print(my_list) # 输出 [3, 2.5, "hello", "world"] ``` 除了 append() 方法,列表还支持 insert()、remove()、pop() 等方法,可以对列表进行增删改查操作。 ### 回答2: Python中的列表是一种非常常用的数据结构,是一组有序的元素集合,可以通过索引来访问其中的元素。列表可以包含多种类型的数据,包括数字、字符串、列表等等,且可以根据需要动态地添加、删除、修改其中的元素。在Python中,列表的创建方式非常简单,只需要用一组方括号将其中的元素括起来即可。 可以使用列表的索引来获取其中的元素。在Python中,列表的索引从0开始,即第一个元素的索引为0,第二个元素的索引为1,以此类推。要访问列表中的最后一个元素,可以使用-1作为索引,-2表示倒数第二个元素,依此类推。 列表元素的访问、添加、删除、修改、排序等操作属于Python基础知识,这里简单介绍其中几个: 1.访问列表元素:可以使用索引号来访问列表元素。例如,list=[1,2,3],要访问第一个元素,可以使用list[0],输出为1。 2.添加元素:可以使用append()方法向列表中添加一个元素,或者使用extend()方法向列表中添加多个元素。例如,list=[1,2,3],要添加一个元素4,可以使用list.append(4);要添加多个元素5,6,7,可以使用list.extend([5,6,7])。 3.删除元素:可以使用del语句或者remove()方法来删除列表中的元素。del语句直接删除列表中指定索引的元素,例如,del list[0]可以删除列表的第一个元素;remove()方法删除第一个匹配的元素,例如,list.remove(2)可以删除列表中的元素2。 4.修改元素:可以使用索引号来修改列表中的元素,例如,list[1]=5可以将列表中第二个元素修改为5。 5.排序:可以使用sort()方法对列表进行排序,默认是升序排列,也可以指定reverse=True来进行降序排列。 以上是Python列表的基本操作,熟练掌握这些操作,可以更好地使用列表进行各种计算和数据处理。 ### 回答3: 在Python中,列表(List)是一种非常常用的数据类型,它允许我们将一组数据放在一个容器中,方便进行操作和处理。列表可以在定义时直接初始化,也可以通过append()、insert()等方法动态地添加或删除元素。 列表的索引从0开始,可以通过正、负整数来访问其中的元素。同时,列表支持切片操作,可以对其中的子序列进行访问和操作。 除了常规的访问和添加操作,列表还提供了一些其他的方法,例如sort()可以对列表进行排序,reverse()可以将列表翻转,count()可以统计某个元素的出现次数等等。 另外,列表还支持循环遍历,可以使用for-in语句来遍历其中的元素。此外,列表也可以被用作其他数据结构的实现,例如栈、队列等等。 总的来说,列表是Python中一个非常灵活和强大的数据类型,可以用于各种场景下的数据处理和操作。但是需要注意,由于列表是可变的,因此在多线程、多进程等并发环境中需要考虑线程安全的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值