基本数据类型及内置方法
一、数字类型int与float
- int整形的定义:
age=10 #本质age = int(10)
-
其他进制转十进制
-
二进制:0,1 (如110)
1 * (2** 2)+1 * (2** 1) + 0 * (2** 0) = 4+2+0 = 6
-
八进制:0-7 (如123)
1 * (8** 2) + 2 * (8** 1) + 3 * (8**0) = 64 + 16 + 3 = 83
-
十六进制:0-9 a-f
3 * (16 ** 2) + 2 * (16 ** 1) + 1 * (16** 0) = 768 + 32 + 1 = 801
-
- 十进制转其他进制
#十进制转二进制:
# print(bin(108)) # 0b 1101100
#十进制转八进制:
# print(oct(83)) # 0o 123
#十进制转十六进制:
# print(hex(1000)) # 0x 3e8
-
float浮点型的定义
height = 1.73 #本质height=float(1.73)
字符串转整形需要先转成浮点型
二、字符串str
-
字符串的定义:单引号/双引号/三引号之间包含的字符就是字符串(三种方式没有任何区别,但是不可以混用)
-
字符串前面加小写的r,代表转义(如果字符串中有特殊含义的字符,就可以定义为普通字符)
#数据类型转换:str()可以将任意数据类型转换成字符串类型,如:
l1 = [1,2,3,4,5]
print(type(l1))
print(type(str(l1)))
<class 'list'>
<class 'str'>
1.索引取值:(正向取,反向取) 只能取值不能存
s1 = 'hello world'
>>> s1[4] #表示正向取值,从左往右
'o'
>>> s1[-7] #表示反向取值,从右往左
'o'
2.索引切片:截取字符串中的一小段字符串(顾头不顾尾)
>>> s1[0:5] #取出索引为0-4的所有字符
'hello'
>>> s1[5:] #取出索引从5开始后面所有的字符
' world'
>>> s1[::-1] #从右往左依次取值
'dlrow olleh'
>>>
3.长度len:获取字符串的长度,也就是字符的个数,空格也算字符
>>> len(s1)
11
4.成员运算:in 和 not in
>>> 'hello' in s1 #判断hello在不在s1中
True
>>> 'world' not in s1 #判断world是否不在s1中
False
5.strip:移除字符串首尾指定的字符,默认移除空格
>>> s2 = '**hello**'
>>> s2.strip('*') #括号中指定移除的字符,如果不输入,默认移除空格
'hello'
lstrip移除左边的字符
>>> s2 = '***hello***'
>>> s2.lstrip('*')
'hello***'
rstrip 移除右边的字符
>>> s2.rstrip('*')
'***hello'
6.split切分:对字符串进行切分,可以指定切分的分隔符,也可以指定切分次数,返回的是列表
>>> s1.split() #默认空格作为切分符号
['hello', 'world']
>>> s2 = '192.168.1.111'
>>> s2.split('.') #指定以.作为切分符号
['192', '168', '1', '111']
>>> s2.split('.',1) #括号中的1代表切割的次数
['192', '168.1.111']
rsplit:可以从右往左切割
>>> s2.rsplit('.',1) #从右往左切分
['192.168.1', '111']
7.循环:依次取出字符串中的每个字符
s2 = '早上好'
for i in s2:
print(i)
早
上
好
8.lower(),upper()
>>> s3 = 'Hello World'
>>> s3.lower() #将字母都变小写
'hello world'
>>> s3.upper() #将字母都变大写
'HELLO WORLD'
9.startswith和endswith
>>> s1.startswith('h') #判断字符串开头是否是以括号里的字符开头
True
>>> s1.endswith('d') #判断字符串结尾是否是以括号里的字符结尾
True
>>> s1.startswith('d')
False
>>> s1.endswith('h')
False
10.格式化输出之forma
按位置一一对应
>>> name = 'yang'
>>> age = 22
>>> gender = 'male'
>>> print('my name is {},my age is {} and my gender is {}' .format(name, age, gender))
my name is yang,my age is 22 and my gender is male
按索引
>>> print('my name is {0},my age is {1} and my gender is {2}' .format(name, age, gender))
my name is yang,my age is 22 and my gender is male
>>> print('my name is {2},my age is {0} and my gender is {1}' .format(name, age, gender))
my name is male,my age is yang and my gender is 22
按指定参数传值
>>> print('my name is {a},my age is {b} and my gender is {c}' .format(a=name, b=age, c=gender))
my name is yang,my age is 22 and my gender is male
>>> print('my name is {c},my age is {a} and my gender is {b}' .format(a=name, b=age, c=gender))
my name is male,my age is yang and my gender is 22
11.join:将列表中每个元素按照字符串中的分隔符进行拼接
>>> L1 = ['yang','22','male']
>>> '|'.join(L1)
'yang|22|male'
>>> '*'.join(L1)
'yang*22*male'
12.replace:将字符串中元素进行替换,(先旧后新)
>>> l1 = 'my name is yang, my age is 18'
>>> l1.replace('my', 'My') #语法:.replace('旧','新')
'My name is yang, My age is 18'
>>> l1.replace('my', 'My',1) #1 代表只把一个my改为 My
'My name is yang, my age is 18'
13.isdigit:判断字符串中的数据,是否是数字组成
>>> l2 = '31415926'
>>> l2.isdigit()
True
>>> l2 = '3.1415926'
>>> l2.isdigit()
False
score = input('请输入您要查询的成绩:')
if score.isdigit():
score = int(score)
if score >= 60:
print('及格')
else:
print('不及格')
else:
print('请输入数字')
三、列表list
- 列表list的定义:在中括号[ ]内,用逗号分隔开的多个任意数据类型的值
>>> list('hello') #任意类型转换成list后,会把每个元素放到列表中
['h', 'e', 'l', 'l', 'o']
>>> list((1,2,3))
[1, 2, 3]
1.索引取值:正反都可以取,不仅可以取还可以存
>>> list1 = [1,2,3,4,5]
>>> list1[0] #正向取索引从0开始
1
>>> list1[-1] #反向取表示从右往左
5
>>> list1[-1] = 6 #可以按照索引来修改制定位置的值
>>> list1
[1, 2, 3, 4, 6]
2.索引切片:顾头不顾尾
>>> list1[0:3] #按照索引取出0到3的元素
[1, 2, 3]
>>> list1[0:5:2] #2代表步长,一次走两个元素
[1, 3, 6]
3.添加append:列表尾部追加元素
>>> list1.append(7)
>>> list1
[1, 2, 3, 4, 6, 7]
4.extend:追加多个元素
>>> list1.extend([8,9,10])
>>> list1
[1, 2, 3, 4, 6, 7, 8, 9, 10]
5.insert:在指定位置插入元素
>>> list1.insert(4,5)
>>> list1 #5就回来了
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
6.删除:
del
>>> del list1[-1] #删除索引为-1的元素
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8, 9]
pop():默认删除最后一个值,并且将删除的值返回,括号内也可以用索引来删除指定元素
>>> list1.pop()
9 #将删除的元素返回
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8]
>>> list1.pop(-1) #删除索引为-1的元素
8
remove() :括号内表示要删除哪个元素,不需要用索引,没有返回值
>>> list1.remove(5) #咱们的5又没有了
>>> list1
[1, 2, 3, 4, 6, 7]
>>> shanchu = list1.remove(4) #不会返回删除值
>>> print(shanchu)
None
7.reverse():颠倒顺序
>>> list1.reverse()
>>> list1
[7, 6, 3, 2, 1]
8.sort():给列表内所有元素排序
>>> list1
[7, 6, 3, 2, 1]
>>> list1.sort()
>>> list1
[1, 2, 3, 6, 7] #默认从小到大的顺序
>>> list1.sort(reverse=True) #reverse指定是否颠倒顺序,默认为False
>>> list1
[7, 6, 3, 2, 1]
9.count:统计当前列表内指定元素的个数
>>> list.count(1)
2
10.index:获取当前指定元素的索引值,还可以指定查找范围
>>> list.index(8)
0
>>> list.index(7)
1
四、元组tuple
-
用途:存储多个不同类型的值(不能存可变类型)
-
定义方式:用小括号存储数据,数据之间通过逗号分隔
t1=('a','b') #t1=tuple(('a','b'))
>>> t1 = (1,'hello',1.73,2,3)
1.索引取值:按索引取值(正取,反取),只能取,不能存
>>> t1[1]
'hello'
2.索引切片:(顾头不顾尾,步长)
>>> t1[0:5:2]
(1, 1.73, 3)
3.成员运算:
>>> 'hello' in t1
True
>>> 'world' in t1
False
4.长度len:
>>> len(t1)
5
5.循环:
>>> for i in t1:
... print(i)
...
1
hello
1.73
2
3
6.count
>>> t1.count(1)
1
>>> t1.count('hello')
1
7.index:
>>> t1.index(2)
3
五、字典dict
- 定义方式:通过大括号来存储数据,通过key:value来定义键值对数据,用逗号隔开
>>> info={'name':'yang','age':'22','sex':'male'}
>>> info
{'name': 'yang', 'age': '22', 'sex': 'male'}
- 类型转换
#第一种:
>>> info=dict([['name','yang'],('age','22')])
>>> info
{'name': 'yang', 'age': '22'}
#第二种:使用fromkeys生成一个新的字典,它会以第一个参数作为key,以第二个参数为值
>>> info.fromkeys(('name','age','sex'),None)
{'name': None, 'age': None, 'sex': None}
1.按照key存取值:
>>> info['name'] #使用key取值
'yang'
>>> info['age'] = '18' #如果字典中有key修改值
>>> info
{'name': 'yang', 'age': '18'}
>>> info['hobby'] = 'sleep' #如果字典里没有key,新增key:value
>>> info
{'name': 'yang', 'age': '18', 'hobby': 'sleep'}
2.长度:
>>> len(info)
3
3.成员运算:
>>> 'hobby' in info
True
>>> 'sex' in info
False
4.get:获取指定key的值,若不存在,默认返回None
>>> info.get('age') #key存在则取值
'18'
>>> res = info.get('a') #key不存在返回None
>>> print(res)
None
>>> res = info.get('a',666) #第二个参数可以修改默认返回的值
>>> print(res)
666
keys:
>>> info.keys() #返回所有key
dict_keys(['name', 'age', 'hobby']
values:
>>> info.values() #返回所有value
dict_values(['yang', '18', 'sleep'])
items:
>>> info.items() #返回所有键值对,返回值都是列表套元组,每个键值对都是存在元组
dict_items([('name', 'yang'), ('age', '18'), ('hobby', 'sleep')])
5.pop()删除:指定key进行删除,有返回值,返回的是value
>>> info.pop('hobby')
'sleep'
>>> info
{'name': 'yang', 'age': '18'}
6.popitem():随机弹出一个键值对,有返回值,返回一个元组
>>> info.popitem()
('age', '18')
>>> info
{'name': 'yang'}
7.update:用新字典替换旧字典,有则修改,无则添加
>>> info.update({'name':'chen'}) #有name则修改
>>> info
{'name': 'chen'}
>>> info.update({'age':'18'}) #无age则添加
>>> info
{'name': 'chen', 'age': '18'}
8.fromkeys:
>>> info.fromkeys(['name','age'],'oh')
{'name': 'oh', 'age': 'oh'}
#注意:不是同一个字典,而是生成新的一个字典,以第一个参数(列表)为key,第二个为value
>>> info
{'name': 'chen', 'age': '18'}
>>> info2 = info.fromkeys(['name','age'],'oh')
>>> info2
{'name': 'oh', 'age': 'oh'}
9.setdefault():key不存在则新增键值对,存在返回对应的value
>>> info
{'name': 'chen', 'age': '18'}
>>> info.setdefault('hobby','buybuybuy') #key不存在旧新增
'buybuybuy' #返回对应value
>>> info
{'name': 'chen', 'age': '18', 'hobby': 'buybuybuy'}
>>> info.setdefault('age','22') #存在则返回已存在key对应的值
'18'
>>> info #对字典不做修改
{'name': 'chen', 'age': '18', 'hobby': 'buybuybuy'}
六、集合
-
用途:集合、列表、元组、字典都可以存放多个值,集合也一样,但是集合主要用于去重、关系运算
-
定义:用大括号存储,每个元素通过逗号隔开,定义空集合需用
set()
来定义- 集合中每个元素必须是不可变类型
- 集合中没有重复的元素(体现了去重功能)
- 集合内元素无序
-
关系运算
1.合集(|):求两个人的所有好友(重复的直留一个)
>>> friends1 = {'zero','sean','tank','egon'}
>>> friends2 = {'jj','elax','sean','egon'}
>>> friends1 | friends2
{'egon', 'zero', 'jj', 'elax', 'sean', 'tank'}
2.交集(&):求两个人的共同好友
>>> friends1 & friends2
{'sean', 'egon'}
3.差集(-):
>>> friends1 - friends2 #求1独有的好友
{'zero', 'tank'}
>>> friends2 - friends1 #求2独有的好友
{'elax', 'jj'}
4.对称差集(^):求两个人的独有好友(就是去掉重复的之后)
>>> friends1 ^ friends2
{'zero', 'jj', 'elax', 'tank'}
5.值是否相等(==):
>>> friends1 == friends2
False
6.父集:一个集合是否包含另外一个集合
>>> {1,2,3} > {1,2} #包含True
True
>>> {1,2,3} > {1,2,3,4} #不包含False
False
7.子集:
>>> {1,2} < {1,2,3}
True
>>> {1,2,3,4} < {1,2,3}
False
- 去重
- 只能针对不可变类型
- 集合本身是无序的,去重之后无法保留原来的顺序
>>> l1 = ['a','b','c',1,'a','b',2]
>>> j1 = set(l1)
>>> j1
{1, 2, 'a', 'b', 'c'}
针对不可变类型,并且保证顺序
l = [
{'name': 'lili', 'age': 18, 'sex': 'male'},
{'name': 'jack', 'age': 73, 'sex': 'male'},
{'name': 'tom', 'age': 20, 'sex': 'female'},
{'name': 'lili', 'age': 18, 'sex': 'male'},
{'name': 'lili', 'age': 18, 'sex': 'male'},
]
new_1 = []
for dic in l:
if dic not in new_1:
new_1.append(dic)
print(new_1)
#结果:去除了重复,保证了顺序
[
{'name': 'lili', 'age': 18, 'sex': 'male'},
{'name': 'jack', 'age': 73, 'sex': 'male'},
{'name': 'tom', 'age': 20, 'sex': 'female'}
]
七、数据类型总结
- 按存值个数区分
- 只能存一个值:可称为标量/原子类型(数字、字符串)
- 可以存放多个值:可称为容器类型(列表、元组、字典)
- 按照访问方式区分
- 直接访问:只能通过变量名访问整个值(数字)
- 顺序访问:可以用索引访问指定的值,索引代表顺序,成为序列类型(字符串、列表、元组)
- key访问:可以通过key访问指定的值(字典)
- 按可变不可变区分
- 可变类型:列表、字典
- 不可变类型:数字、字符串、元组
- 可变类型:值发生改变时,内存地址不变,证明在改变原值
- 不可变类型:值发生改变时,内存地址也变,证明没有改变原值,而是产生了新的值