python--变量、数据类型及应用
1 变量
变量:变量是存储信息(数据)的容器。
1.1 变量的三要素:
- 数据类型
- 内存地址
- 变量的值
a = [1,3,5,7];
b=a;
print(b)
b[0:2]=0,1;
print(id(a)) #打印变量的内存地址
print(id(b))
print(a)
print(b)
---运行结果
[1, 3, 5, 7]
2735228801608
2735228801608
[0, 1, 5, 7]
[0, 1, 5, 7]
1.2 变量的命名和使用
- 变量名只能包含数字,字母和下划线。
- 变量名不能包含空格,但可以使用下划线来分隔其中的单词。
- 不要将python关键字和函数名作为变量名。
- 变量名应既简短又具有描述性。
2 字符串(str)
字符串或串(String)是由数字、字母、下划线组成的一串字符。
2.1 赋值
方法1 单引号
name='du'
print(type(name))
print(name)
方法2 双引号
name="du"
print(type(name))
print(name)
方法3 三引号
name='''
du
'''
print(type(name))
print(name)
三种方法运行输出内容相同:
<class 'str'>
du
2.2 应用
2.2.1 index 取指定元素的下标(索引),如果没有取到报错
a = 'aaadfdfdfkajfnskiddd'
print(a.index('d'))
....运行结果
3
2.2.2 [] 根据索引取值或改值
#获取索引位置元素值
a = 'aaadfdfdfkajfnskiddd'
print(a[6])
....运行结果
f
2.2.3 切片
#根据索引位置左侧所有值
a = 'aaadfdfdfkajfnskiddd'
print(a[:6])
....运行结果
aaadfd
2.2.4 split 从左往右将字符串以指定分隔符切割成列表(可指定刀数)
msg = '192.168.250.254'
print(msg.split('.'))
...运行结果
['192', '168', '250', '254']
msg = '192.168.250.254'
print(msg.split('.',2))
...运行结果
['192', '168', '250.254']
2.2.5 rsplit 从右往左将字符串以指定分隔符切割成列表(可指定刀数)
2.2.6 join 把可迭代对象变成字符串(可迭代对象:列表,元组,字典,字符串,集合)
res = ''.join(['1','2','3'])
print(res)
...运行结果
123
2.2.7 replace 替换字符(可以指定替换次数)
msg = '192.168.250.254'
print(msg.replace('.','-'))
...运行结果
192-168-250-254
msg = '192.168.250.254'
print(msg.replace('.','-',2))
...运行结果
192-168-250.254
2.2.8 strip去除字符串两边指定字符(默认空格)
msg="======helloworld======"
print(msg.strip('=')
...运行结果
helloworld
msg="======helloworld======"
print(msg.lstrip('=')) #指定替换左侧 leaf
...运行结果
helloworld======
msg="======helloworld======"
print(msg.rstrip('=')) #指定替换右侧 right
...运行结果
======helloworld
2.2.9 encode把字符串变成bytes类型
msg='你好'
res = msg.encode('utf-8')
print(res)
...运行结果
b'\xe4\xbd\xa0\xe5\xa5\xbd'
2.2.10 decode解码
msg=b'\xe4\xbd\xa0\xe5\xa5\xbd'
res = msg.decode('utf-8')
print(res)
...运行结果
2.2.11 格式化输出
name = 'du'
age = 23
#第一种玩法
res = 'my name is {}, my age is {}'.format(name,age)
print(res)
#第二种玩法
res = 'my name is {1}, my age is {0}'.format(name,age)
print(res)
#第三种玩法
res = 'my name is {n}, my age is {a},my small name si {n}'.format(a=age,n=name)
print(res)
...运行结果
my name is du, my age is 23
my name is 23, my age is du
my name is du, my age is 23,my small name si du
2.2.12 %s ,%d , %f 占位符,格式化输出
%s -->string 字符串(不做改变)
%d -->digit 数字(取整)
%f -->floating 浮点数 (可设置保留小数点位数)
name = "du"
high = 192.2
res = 'my high is %s' % high
print(res)
print("my name is %s,my high is %s" %(name,high))
...运行结果
my high is 192.2
my name is du,my high is 192.2
%.2f 保留两位小数
a=7.5256664362
print('%.2f' % a )
...运行结果
7.53
2.2.13 修改字符串大小写
msg='Hello,World'
print(msg.upper())
print(msg.lower())
...运行结果
HELLO,WORLD
hello,world
2.2.14 合并字符串
msg1='hello'
msg2='world'
full_msg=msg1+' '+msg2
print(full_msg)
...运行结果
hello world
3 列表 (list)
- List(列表) 是 Python 中使用最频繁的数据类型。
- 列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。
- 列表用 [ ] 标识,是 python 最通用的复合数据类型。
- 列表中可以保存多个有序数据。
- 列表可以保存任意对象
3.1 赋值
a4 = [1,2,3,'a1',(123)]
print(type(a4))
print(a4)
...运行结果
<class 'list'>
[1, 2, 3, 'a1', 123]
3.2 应用
3.2.1 count统计指定元素个数
students = ['f','a','b','c','d','d','1',2]
print(students.count('d'))
print(students.count(2))
...运行结果
2
1
3.2.2 len统计列表长度(len函数可以统计所有可迭代对象的长度)
students = ['f','a','b','c','d','d','1',2]
print(len(students))
...运行结果
8
3.2.3 调用列表中的元素 :listname[索引]
students = ['f','a','b','c','d','d','1',2]
print(students[3])
...运行结果
c
3.2.4 index取指定元素的下标(索引),如果没有取到报错
students = ['f','a','b','c','d','d','1',2]
print(students.index('f'))
...运行结果
0
3.2.5 append会把指定元素追加到末尾
students = ['f','a','b','c','d','d','1',2]
students.append('sb250')
students.append('sb250')
print(students)
...运行结果
['f', 'a', 'b', 'c', 'd', 'd', '1', 2, 'sb250', 'sb250']
3.2.6 remove 删除指定元素
students = ['f','a','b','c','d','d','1',2]
students.remove('f')
print(students)
...运行结果
['a', 'b', 'c', 'd', 'd', '1', 2]
3.2.7 extend把可迭代对象传入进去
可迭代对象包括:列表,字典,字符串,元组,集合
students = ['f','a','b','c','d','d','1',2]
students.extend(['asd','qwe'])
print(students
...运行结果
['f', 'a', 'b', 'c', 'd', 'd', '1', 2, 'asd', 'qwe']
4 字典(dict)
字典的值(value)可以是任意对象
字典的键(key)可以是任意不可变对象(int、str、bool、tuple。。。。)常用str
字典的键(key)不可以重复,重复后面的值会覆盖前面的值
4.1 赋值
list1 = {'name':'007','age':88}
list2={
'name':'007',
'age':88
}
print(type(list1))
print(list2)
...运行结果
<class 'dict'>
{'name': '007', 'age': 88}
4.2 应用
4.2.1 update把两个字典合并成一个字典(更新)
info1 = {
'name':'du',
'high':190,
'weight':160,
}
info2 = {
'telephone':110,
'name':'007'
}
info1.update(info2)
print(info1)
print(info2)
...运行结果
{'name': '007', 'high': 190, 'weight': 160, 'telephone': 110}
{'telephone': 110, 'name': '007'}
4.2.2 items将所有键值对全部打印出来
info1 = {
'name':'du',
'high':190,
'weight':160,
}
print(info1.items())
...运行结果
dict_items([('name', 'du'), ('high', 190), ('weight', 160)])
4.2.3 keys打印字典中所有的key
info1 = {
'name':'du',
'high':190,
'weight':160,
}
print(info1.keys())
...运行结果
dict_keys(['name', 'high', 'weight'])
4.2.4 values打印字典中所有的value
info1 = {
'name':'du',
'high':190,
'weight':160,
}
print(info1.values())
...运行结果
dict_values(['du', 190, 160])
get通过key取value,如果取不到返回None,不能重新赋值
[]通过key取value,如果取不到报错,可以重新赋值的
info1 = {
'name':'du',
'high':190,
'weight':160,
}
print(info1.get('aa'))
info1['name'] = '007'
print(info1)
...运行结果
None
{'name': '007', 'high': 190, 'weight': 160}
4.2.5 for循环遍历字典
info1 = {
'name':'du',
'high':190,
'weight':160,
}
for key,value in info1.items():
print(key,value)
for key in info1.keys():
print("key:%s value:%s"%(key,info1[key]))
4.2.6 字典添加键值对
info1 = {
'name':'du',
'high':190,
'weight':160,
}
info1['age']=88
print(info1)
...运行结果
{'name': 'du', 'high': 190, 'weight': 160, 'age': 88}
5 数字(整数)(int)
Python支持四种不同的数字类型:
- 数字数据类型用于存储数值。他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。
- int(有符号整型)
- long(长整型[也可以代表八进制和十六进制])
- float(浮点型)
- complex(复数)
5.1 赋值
num = 250
print(type(num))
print(num)
...运行结果
<class 'int'>
250
5.2 应用
5.2.1 算数运算符
在python中可以对整数进行加(+)减(-)乘(*)除(/)
englis=94
math=85.9
python=60.5
avg = (englis + math + python)/3
dif = englis - python
print("平均成绩为%.2f,english比python成绩高%s"%(avg,dif))
...执行结果
平均成绩为80.13,english比python成绩高33.5
5.2.2 赋值运算符
运算符 | 说明 | 举例 | 展开形式 |
---|---|---|---|
= | 简单的赋值运算 | x=y | x=y |
+= | 加赋值 | x+=y | x=x+y |
-= | 减赋值 | x-=y | x=x-y |
*= | 乘赋值 | x*=y | x=x*y |
/= | 除赋值 | x/=y | x=x/y |
%= | 取余赋值 | x%=y | x=x%y |
**= | 幂赋值 | x**=y | x=x**y |
//= | 最整除赋值 | x//=y | x=x//y |
a = 3
b = 17
c = 5
print(a%b)
print(b%a)
b//=a
# b//=c
print(b)
...运行结果
3
2
5
6 浮点数(float)
6.1 赋值
num= 11.1
print(type(num))
print(num)
...运行结果
<class 'float'>
11.1
7 元组(tuple)
元组不能二次赋值,相当于只读列表。
7.1 赋值
num = (1,2,3,4,[1,2,3,(1,2,3)])
print(type(num))
print(num)
...运行结果
<class 'tuple'>
(1, 2, 3, 4, [1, 2, 3, (1, 2, 3)])
7.2 应用
- 列表可读可修改,元组一般是用来读的
- 在相同元素的情况下,列表会占用的资源更多一些
8 集合(set)
集合和列表非常相似
不同点:
- 集合中只能存储不可变对象
- 集合中存储对象是无序的(不是按照元素的插入顺序保存的)
- 集合中不能出现重复的元素
8.1 赋值
- 在创建空集合时只能使用set()函数实现;
- xxx={} python中空{}默认数据类型为字典;
8.1.1 set()函数
在python中可以使用set()函数将列表,元组等其他可迭代对象转换为集合;
语法:setname = set(iteration)
- setname:表示集合的名字
- iteration:表示要转换的可迭代对象,可以表示列表,元组,range对象等;也可以是字符串,如果是字符串则返回的集合是包含全部不重复字符的集合
list1 = [1,2,3,3,3,3,3]
num = set(list1)
print(type(num))
print(num)
...运行结果 (集合可以自动去重)
<class 'set'>
{1, 2, 3}
8.2 应用
8.2.1 集合的交集,并集,差集运算
- 集合中最常用的就是交集,并集,差集和对称差集运算
- 进行交集运算时使用"&"
- 进行并集运算时使用"|"
- 进行差集运算时使用"-"
- 进行对称差集运算时使用"^"
set1 = set(["a","b","c","d"])
set2 = set(["e","f","c","d"])
print("集合1和集合2都有的元素" , set1 & set2)
print("集合1有或集合2有的元素" , set1 | set2)
print("集合1有而集合2没有的元素" , set1 - set2)
print("集合1和集合2中只有一个集合有的元素" , set1 ^ set2)
...运行结果
集合1和集合2都有的元素 {'d', 'c'}
集合1有或集合2有的元素 {'c', 'b', 'd', 'a', 'e', 'f'}
集合1有而集合2没有的元素 {'a', 'b'}
集合1和集合2中只有一个集合有的元素 {'a', 'e', 'b', 'f'}
8.2.2 add()向集合中添加元素
num = set([1,2,3,3,3,3,3])
print(type(num))
print(num)
num.add(4) #添加一个元素
print(num)
...运行结果
<class 'set'>
{1, 2, 3}
{1, 2, 3, 4}
8.2.3 从集合中删除元素
在python中可以使用del命令删除整个集合,可以使用remove()方法删除一个元素,或者使用集合对象的clear()方法清空集合,即删除集合中的所有元素,使其变成一个空集合
num = set([1,2,3,3,3,3,3,4.6])
print(type(num))
print(num)
print(num.remove(3))
print("remove后集合中的元素有:%s"%num)
print(num.clear())
print("clear后集合中的元素为空:%s"%num)
...运行结果
<class 'set'>
{1, 2, 3, 4.6}
None
remove后集合中的元素有:{1, 2, 4.6}
None
clear后集合中的元素为空:set()
9 布尔(bool)
- 布尔类型主要用来表示真或假的值,在python中标识符True和False被解释为布尔值;
- python中的布尔值可以转化为数值,其中True表示1,而False表示0
9.1 赋值
a = ''
print(type(True))
if a:
print('真')
else:
print('假')
...运行结果
<class 'bool'>
假
9.2 应用
在python中,所有的对象都可以进行真值测试,其中下面的几种情况得到的值为假,其他对象在if或者while语句中都表现为真。
- False或None;
- 数值中的0;包括0、 0.0、 虚数0;
- 空序列,包括字符串、 空元组、空列表、空字典;
- 自定义对象的实例,该对象的.__bool__()方法返回False或.__len__()方法返回0;
b = 17
print (b.__bool__())
b = "xxx"
print(b.__len__())
10 数据类型转换
函数 | 作用 |
---|---|
int(x) | 将x转换成整数类型 |
float(x) | 将x转换成浮点数类型 |
str(x) | 将x转换成字符串 |
repr(x) | 将x转换成表达式字符串 |
chr(x) | 将整数x转换成一个字符 |
ord(x) | 将一个字符x转成他对应的整数值 |
11 切片
- 字符串(str)、列表(list)、字典(dict)、元组(tuple)等有序数据类型均可切片
- 以列表为例,切片是指从当前的列表中获取一个子列表
#创建一个列表
List = [ 0,1,2,3,4,5,6,7,8 ]
列表的索引可以是负数
如果索引为负数,则从后向前获取元素,-1为倒数第一个,-2为倒数第2个
print(List[-2])
----输出结果
7
语法:[起始:结束]
- 通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素
- 做切片操作是,总会返回一个新的列表,不会影响原来的列表
- 起始和结束位置的索引都可以省略不写
- 如果省略结束位置的索引,则会截取到最后
- 如果省略起始位置的索引,则会从第一个元素开始截取
print(List[0:5])
----输出结果
[0, 1, 2, 3, 4]
语法:列表[起始位:结束位:步长]
- 步长表示每次获取元素的间隔,默认值是1
- 步长不能是0,可以为负数
- 如果步长为负数,则会从列表的后部向前取元素
print(List[0:5:2])
print(List[-1:-8:-1])
print(List[-8:-1:1])
----输出结果
[0, 2, 4]
[8, 7, 6, 5, 4, 3, 2]
[1, 2, 3, 4, 5, 6, 7]
12 pop()函数用于移除列表或字典中的一个元素,并且返回该元素的值
- pop()函数是pyhton的内置方法,可用作列表,字典等,
- pop()函数用于移除一个元素(默认最后一个元素),并且返回该元素的值
list1 = ["a","b","c","d"]
dict1 = {
"a":"1",
"b":"2",
"c":"3",
"d":"4"
}
print("列表使用pop删除的元素为%s"%list1.pop(-2)) #列表中可以按索引删除,默认删除最后一个元素
print("列表删除元素后list1为%s"%list1)
print("字典使用pop删除的元素为%s"%dict1.pop("c"))
print("pop删除后的字典dict1=%s"%dict1)
...运行结果
列表使用pop删除的元素为c
列表删除元素后list1为['a', 'b', 'd']
字典使用pop删除的元素为3
pop删除后的字典dict1={'a': '1', 'b': '2', 'd': '4'}