python之数组、元组、字典和集合(3)

本文深入探讨了Python中的数据结构,包括数组、元组、字典和集合的创建、操作及应用技巧,详解了基本运算符、切片、删除等核心概念,并提供了丰富的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一级目录

可变字符串

import io
s = "hello, world"
s
'hello, world'
sio = io.StringIO(s)
sio
<_io.StringIO object at 0x00000251E6828948>
sio
<_io.StringIO object at 0x00000251E6828948>
sio.getvalue()
'hello, world'
len(s)
12
sio.seek(6)
6
sio.write("caom")
4
sio.getvalue()
'hello,caomld'

基本运算符

在这里插入图片描述
注意:python与c、Java的不同是没有自增、自减(++、–)

c = 23
bin(c)
'0b10111'
c = 3
c << 3 #向左移3位相当于c的值乘以2的3次方
24
list1 = [1,2,3,'a']
list2 = list1 * 3
print(list2)

数组list、元组tuple、字典dictionary、集合set

参考资料:
https://blog.youkuaiyun.com/Yeoman92/article/details/56289287

注意区别四者的含义!

#创建一个元组
tu = ('2','a','3','4')
print(tu)

#遍历元组
for i in  tu:
    print(i)

#创建一个字典,字典内元素是可以重复的
dict1 = {'name' : 'tang', 'age' : 24, 'sex' : 'man'}
print(dict1)

print(len(dict1))
#修改字典元素
dict1['name'] = 'zhang'
print(dict1)

#创建一个数组
list1 = [1,2,3,2,'a']
print(list1)
#蒋素祖转换为集合
list1_set = set(list1)
#注意转换后的集合去掉了原来数组重复的元素
print(list1_set)

数组list

在数组之间的中进行加减运算时,推荐使用append()、expend()这种,其运算效率远大于+、-

切片

在这里插入图片描述

a = [1,2,3,4,5,6]
#从索引1开始一直取到末尾,步长为2
b = a[1::2]
print(b)

删除

#第一种使用del,使用索引删除
a = [2,3,4,‘a’,5]
del a[2]
#第二种pop()也是使用索引删除,当括号内无指示时,删除末尾元素
 a.pop(2)
#第三种 remove()直接输入元素内容进行删除
a.remove(a)
#不改变原始a的排序,只是对输出结果进行排序
sorted(a)
[0, 1, 2, 3]
a
[1, 3, 2, 0]
#迭代器只能使用一次
a
[0, 2, 3, 1]
c = reversed(a)
c
<list_reverseiterator object at 0x00000251E6933160>
list(c)
[1, 3, 2, 0]
#使用第二次则报错
list(c)
[]

元组tuple

在这里插入图片描述

元组的创建

a = ('a',3,5)
print(a)

c = tuple("nihao")
print(c)
#使用tuple()将其他类型转为tuple
b = list(range(5))
print(b)
d = tuple(b)
print(d)

zip的用法

a = ('a',2,4)
b = ('b',3,7)
d = zip(a,b)
d
<zip object at 0x00000251E68E5708>
list(d)
[('a', 'b'), (2, 3), (4, 7)]

生成器推导式

#下面的是用的[]
a = [x*3 for x in range(10)]
a
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
#与上面的额区别就是,下面用的是()
s = (x*3 for x in range(10))
s
<generator object <genexpr> at 0x00000251E6919E60>
# 这里s是生成器,既可以生成数组,也可以生成元组
#但只能生成其中一种不能用两次
list(s)
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
tuple(s)
(0, 3, 6, 9, 12, 15, 18, 21, 24, 27)
#利用__next__()来遍历
s = (x*3 for x in range(3))
s.__next__()
0
s.__next__()
3
s.__next__()
6
s.__next__()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
StopIteration

元组的特点总结

在这里插入图片描述

字典dictionary

在这里插入图片描述

字典的创建方式

#第一种
a = {'name':'tang','age':18,'reside':'shandong'}
a
{'name': 'tang', 'age': 18, 'reside': 'shandong'}
#第二种
b = dict(name='tang',age=18)
b
{'name': 'tang', 'age': 18}
#第三种
A = dict.fromkeys(['name','age','job'])
A
{'name': None, 'age': None, 'job': None}
#创建空字典
c = {}
c
{}
d = dict()
d
{}

字典元素的添加、修改和删除

#元素的添加
c = dict(name='tang',age = 18)
c
{'name': 'tang', 'age': 18}
c.update(b)
c
{'name': 'wang', 'age': 18, 'job': 'tony'}
#删除
del c['name']
c
{'age': 18, 'job': 'tony'}
#使用pop命令将字典中键所对应的值删除,并将其赋值给b
c
{'age': 18, 'job': 'tony', 'name': 'tang'}
b = c.pop('age')
b
18
#全部清除字典中的键值
c.clear()
c
{}

字典的解包

# 只解包键
a
{'name': 'wang', 'age': 24, 'reside': 'shandong'}
x,y,z = a
x
'name'
y
'age'
z
'reside'
a
{'name': 'wang', 'age': 24, 'reside': 'shandong'}
# 対键值均解包
x,y,z = a.items()
x
('name', 'wang')
y
('age', 24)
z
('reside', 'shandong')

练习

在这里插入图片描述

r1 = {'name':'高小一','age':18,'salary':300000,'city':'北京'}
r2 = {'name':'高小二','age':19,'salary':200000,'city':'上海'}
r3 = {'name':'高小五','age':20,'salary':100000,'city':'深圳'}

tb = (r1,r2,r3)

#打印高小二的薪水
print(tb[1].get('salary'))
#将表格全部打印
for i in range(len(tb)):
    print(tb[i].get('name'),tb[i].get('age'),tb[i].get('salary'),tb[i].get('city'),end='\n')

集合set

在这里插入图片描述

创建和删除

#创建
a = list('abcdb')
a
['a', 'b', 'c', 'd', 'b']
b = set(a)
b
{'c', 'b', 'a', 'd'}
#添加
b
{'b', 'c', 9, 'd'}
b.add('a')
b
{'b', 'a', 'c', 9, 'd'}
#删除
b
{'c', 'b', 'a', 'd'}
b.remove('a')
b
{'c', 'b', 'd'}

并集、交集和差集

在这里插入图片描述
差集:将a和b作比较,把a中和b不同的取出来。

a
{'c', 'b', 'd'}
b
{'b', 'a', 'c', 9, 'd'}
a|b
{'b', 'a', 'c', 9, 'd'}
a&b
{'c', 'b', 'd'}
a - b
set()
#用函数表示
a
{'c', 'b', 'd'}
b
{'b', 'a', 'c', 9, 'd'}
a.union(b)
{'b', 'a', 'c', 9, 'd'}
a.intersection(b)
{'c', 'b', 'd'}
a.difference(b)
set()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值