泽兴芝士网

一站式 IT 编程学习资源平台

python学习系列1:常用数据类型(字符串、列表、元组、字典等)

大家好,我从事DevOps/AI应用开发工作,每天琢磨怎么通过工具从AI热点里“淘金”。

关注我,获得普通人的科技财经解读,我们一起寻找时代的“财富密码”。

一、变量

1.1.常用方法

type(变量名) #查看变量类型
print(id(name)) #查看变量的内存地址
del(name) #删除变量name

1.2.变量的三种赋值方式

name = 'qixiang' #传统赋值

name = user = 'qixiang' #链式赋值

name,age = 'qixiang',18 #序列解包赋值

二、字符串

2.1.定义

字符串是一个有序的、不可修改的、以引号包围的序列

2.2.特殊字符

"\"转义符		#取消特殊含义的字符或者作续行符
"\n"					  #换行符
"\t"			      #水平制表符,相当于Tab键

2.2.1.转义特殊字符

>>> wpath=r'c:\tmp\nm'
>>> print(wpath)
c:\tmp\nm

2.3.字符串格式化操作

%s		#字符串占位符
%d		#数字占位符
%f		#浮点型占位符
%.2f	#保留小数点后两位

#print('%s age is %d' % ('tom', 18))
print(f"{name} age is {age}")		#推荐使用

2.4.字符串方法

a.字符串截取

包头不包尾,从左往右

name = 'abcdef'
print(len(name))			#取字符串长度
print(name[0])				#取第一个字符a
print(name[1:3])			#取字符bc
print(name[0:5:2])			#每隔一位截取,结果ace
print(name[:2])				#ab
print(name[3:])				#def
print(name[-2:])			#保留最后两个字符,ef
print(name[:])				#abcdef
print(name[::2])			#ace
print(name[-1])				#f
print(name[::-1])			#反转字符串,fedcba
print(name[4:1:-1])	

b.字符串查找

str = 'Hello World'
print(str.count('o'))       # 统计字符o的个数
print(str.find('z'))        # 找不到返回-1
print(str.find('o'))        # 从左往右,返回第一个字符o的下标4
print(str.rfind('o'))       # 从右往左,返回第一个字符o的下标7
print(str.index('o'))       # 从左往右,返回第一个字符o的下标4
print(str.index('z'))       # 找不到抛出异常

c.字符串的分割及替换

str = 'Hello World'
print(str.partition('o'))		#以字符o进行分割,('Hell', 'o', ' World')
str = 'Hello\nWorld'
print(str.splitlines())			#按行分割,用于处理文本,['Hello', 'World']
>>> hi.split() 					# 默认以空格进行切割
['hello', 'world']
>>> 'hello.tar.gz'.split('.')   # 以点作为分隔符切割
['hello', 'tar', 'gz']

print(str.replace('H','w'))		#把所有的H替换为w,wello World

d.字符串修饰

str = 'for'
print(str.center(20,'*'))       # ********for*********
print(str.ljust(10))            #左对齐,占10个位置
print(str.zfill(10))            #从左至右填充,不足用0补齐,0000000for
print(str.ljust(8,'0'))			#从右至左填充,长度小于8,用0填充,for00000
str = '{} is {}'
print(str.format('for','cool')) #将参数按顺序传给前面的大括号,for is cool
'   \thello world!\n   '.strip()			# 去除字符串两端空白字符
'   \thello world!\n   '.lstrip()			# 去除字符串左边空白字符

e.字符串变形

str = 'Hello'
print(str.upper())      #小写变成大写,HELLO
print(str.lower())      #大写变成小写,hello
print(str.swapcase())   #大小写互换,hELLO
print('hello,world'.title())    	#以非字母划分,字符串首字母大写,Hello,World
print('hello,world'.capitalize())   #字符串首字母大写,Hello,world
print('hello \t world'.expandtabs(10))  #制表符强制替换为10个空格(默认8个),hello      world

f.字符串判断

print('123ab'.isalnum())        # 判断是否只有数字或字母
print('abc'.isalpha())          # 判断是否只有字母
print('123'.isdigit())          # 判断是否只有数字
print('HELLO'.isupper())        # 判断是否只有大写字母
print('hello world'.startswith('h'))    # 判断是否由h开头
print('hello world'.endswith('d'))      # 判断是否由d结尾

if not username.strip():		#判断是否为空
	print("用户名不能为空")

g.字符串拼接

a = 'I '
b = 'Love '
c = 'You'
d = a + b + c
print(d)				#结果为:I Love You

三、列表

3.1.定义

列表是一个有序的,可修改的,元素以逗号分割,以中括号包围的序列

列表中的元素可重复

3.2.增删改查

alist = []		#定义一个空列表
alist = ['唐三', '小舞']
alist.append('沐白')          # 在列表后面追加元素
alist.insert(0, '唐昊')       # 在下标为0的位置插入元素,之后的元素整体往后移,当元素很多时,占用内存较多,不推荐该方法

blist = ['魂师', '大魂师']
alist.extend(blist)           # 扩展列表,追加到后面
clist = alist + blist         # 列表相加,赋值给新列表
alist.pop()                   # 默认弹出最后一个元素
alist.pop(3)                  # 弹出下标为3的元素
clist.remove('魂师')          # 从左往右,删除第一个匹配的元素
del alist                     # 删除列表
clist[1] = '小三'             # 修改下标为1的元素
print(clist.count('小三'))    # 统计某个元素的个数
print(clist.index('大魂师'))  # 查找元素的下标值,从左往右,匹配第一个
print(clist[-1])              # 获取列表最后一个元素
print('唐昊' in clist)        # 查找是否在列表中,在返回True,不在返回False
clist.reverse()               # 列表反转
list1 = [4,12,6,1]
list1.sort()                  # 按ASCII码排序

blist = alist.copy() 		  # 将alist的值拷贝一份后,赋值给blist
blist.clear() 				  # 清空列表

>>> alist = [2, '5', 4 , 1, 3]
>>> alist.sort(key=int, reverse=True)		#key仅仅用在比较时
>>> alist
['5', 4, 3, 2, 1]

3.3.list函数

a = 'abc'
b = list(a)             # 把字符串转换为列表
c = ''.join(b)          # 把列表转成字符串
a = [1, 2, 3]
# c = ''.join(a)          			# 会报错,数字列表不能直接转为字符串
c = ''.join(str(i) for i in a)      # 先把列表中的数字转为单个字符串,再拼接为完整字符串

3.4.列表切片

参考字符串截取

3.5.列表解析

>>> [5 + i for i in range(1, 11)]
[6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
>>> ['192.168.1.%s' % i for i in range(1,5)]
['192.168.1.1', '192.168.1.2', '192.168.1.3', '192.168.1.4']
>>> [i for i in range(10) if i % 2 ==0]
[0, 2, 4, 6, 8]

3.6.列表方法

获取列表的下标和值

alist = ['a', 'b', 'c']
for index, value in enumerate(alist):
	print(index, value)

列表去重后保持顺序不变

alist = [10,20,10,5,30,5]
blist = list(set(alist))        #去重
blist.sort(key = alist.index)   #根据索引进行排序,保持原列表顺序不变

四、元组

4.1.元组的定义

元组是有序的,不可修改的,以逗号分割,以小括号包围的序列,可通过()和tuple()函数定义

不能修改,只有在定义的一瞬间可以修改

元组就是一个静态列表

4.2.元组的优点

由于元组不可以修改,因此遍历元组要比列表快

元组不可变,因此元组中的数据被“写保护”,用于存储比较重要的数据

4.3.定义元组

t1 = (1, 2, 'a', 'b')       # 定义一个元组
t1 = ()                     # 定义一个空元组
t1 = (1,)                   # 定义单元素元组

4.4.tuple函数

alist = ['a', 1]
t1 = tuple(alist)       # 列表转为元组
str = 'hello'
t1 = tuple(str)         # 把字符串转为元组
print(''.join(t1))      # 把元组拼接为字符串

五、字典

5.1.字典的定义

字典是无序的、可修改的、元素呈键值对形式、以逗号分割、以大括号包围的数据类型

5.2.字典的特点

字典是无序的,没有索引值,以键取值

字典的键唯一且不可修改

5.3.字典的基本操作

adict = {}		#定义一个空字典
info = {'name': 'tom', 'age': '18'}  # 定义一个字典
print(info.get('name'))              # 获取name的值
print(info.get('name1', 'bob'))      # 没有name1则使用默认值bob
info['addr'] = 'beijing'             # 有则修改,无则添加
del info['age']                      # 删除某一键值对

print(info.keys())              	# 返回一个包含字典所有key的列表
print(info.values())            	# 返回一个包含字典所有value的列表
info.setdefault('addr')         	# 设置默认,如果键存在,返回值;不存在,创造键,默认值为None
info.update({'like': '篮球'})   		# 更新指定键的内容,如果键不存在,则创建键值对
print(info.items())            	 	# 返回字典键值呈元组形式
print(len(info))               		# 计算键值对的个数

info.pop('addr')          # 弹出指定的键值对
info.popitem()           # 随机弹出一个键值对
info.clear()             # 清空字典

5.4.字典方法

a.创建值相同的字典

>>> bdict = {}.fromkeys(['jerry', 'tom', 'bob'], 20)
>>> bdict
{'jerry': 20, 'tom': 20, 'bob': 20}

b.遍历字典

### 不推荐
>>> for key, val in adict.items():
... 	 print(key, val)
### 推荐
for i in adict:
	print(i, adict[i])

c.字典推导式

>>> {k:v for k, v in {'name': 'tom', 'age': '18'}.items()}
{'age': '18', 'name': 'tom'}

六、集合

6.1.集合的定义

集合是一组无序不重复的元素集合

创建一个空集合必须用set(),而不是{ }

集合分为不可变集合forzenset和可变集合set

集合和字典都是无序的,字典的key和集合元素都是不可变的、不能重复的。因此,**集合就像是一个没有value的字典**

6.2.集合基本操作

>>> aset = set('abc')
>>> bset = set('bcd')
>>> aset & bset 			# 交集
{'c', 'b'}
>>> aset | bset  			# 并集
{'c', 'b', 'a', 'd'}
>>> aset ^ bset				#对称差集,并集-交集
{'a', 'd'}
>>> aset.isdisjoint(bset)			#没有交集返回True
False
>>> aset - bset 		  # 差补,在aset中有,bset中没有
{'a'}
>>> aset.add('new')		 # 将new作为整体添加到集合
>>> aset
{'new', 'a', 'c', 'b'}
>>> aset.update('new') 		# 将序列对象中的每个元素逐一添加到集合
>>> aset
{'new', 'c', 'a', 'n', 'w', 'b', 'e'}
>>> aset.remove('new') 				# 删除一项,没有会报错
>>> print(aset.discard('dd'))		#没有不会报错,返回None
None
>>> aset.pop()				#随机删除一项,并打印
b
>>> s1.issuperset(s2) 		# s1是s2的超集吗?
>>> s2.issubset(s1) 		# s2是s1的子集吗?

6.3.去重操作

>>> num_list = [randint(1, 20) for i in range(10)]
>>> num_list
[1, 7, 19, 13, 18, 16, 19, 15, 9, 19]
>>> list(set(num_list))
[1, 7, 9, 13, 15, 16, 18, 19]

七、数据类型对比


控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言