3. Python开发--基本数据类型操作方法

来源:互联网 发布:金域名苑 编辑:程序博客网 时间:2024/06/05 03:04
一. 进制
    0        1010010100101001
    1位
    01010010 100101001
    1字节
    01010010 01010010 +
    unicode

    UTF-8: 自己对应关系
    李      01010010 01010010 01010010

    GBK: 自己对应关系
    李      11010010 01110011

    ====》
    二进制:0  1   10   11   100    101
    八进制:0  1   2    3     4      5   6   7   
    十进制:0  1   2    3     4      5   6   7    8   9   10    ..      15
  十六进制:0  1   2    3     4      5   6   7    8   9   A  B  C  D  E  F

  关于进制总结:
    1. 硬盘上保存数据(二进制): 01010101010101010101
    2. 读取:01010101010101010101 -> 对应的编码的汉字  --> xx
    3. 看到内容:
        - 转换完成的字符串
        - 以十六进制展示的0101

###关于进制示例
#!/usr/bin/python
# -*- coding:utf-8 -*-

f = open('log','r',encoding='utf-8')
data = f.read()
f.close()
print(data)

f = open('log','rb')
data = f.read()
f.close()
print(data)

二. 基本数据类型的详细操作方法
    - 字符串
    - 整数
    - 布尔值
    - 列表
    - 元组
    - 字典
    - 集合
######################## str 字符串 #################
name = 'alex' # str类的对象
1. capitalize 字符串首字母大写
自身不变,会生成一个新的值
v = name.capitalize() # 自动找到name关联的str类,执行其中的capitalize技能
print(name)
print(v)

2. 将所有大写变小写,casefold功能强大,可将德语等多国语言都变成小写
name = 'AleX'
v = name.casefold()
print(name)
print(v)

3. 将所有大写变小写,只支持拉丁字母,如英语字符
name = 'AleX'
v = name.lower()
print(v)

4. 文本居中
参数1: 表示总长度
参数2:空白处填充的字符(长度为1)
name = 'alex'
v = name.center(20)
print(v)
v = name.center(20,'*')
print(v)

5. 统计传入参数1在字符串中出现的次数
参数1: 要查找的值(子序列)
参数2: 起始位置(索引)
参数3: 结束位置(索引)
name = "alexasdfdsafsdfasdfaaaaaaaa"
v = name.count('a')
print(v)
v = name.count('df')
print(v)

v = name.count('df',12)
print(v)
v = name.count('df',0,15)
print(v)

6. 是否以xx结尾
name = 'alex'
v1 = name.endswith('ex')
print(v1)

7. 是否以xx开头
name = 'alex'
v2 = name.startswith('al')
print(v2)

8. **** 转换成字节 ****
name = "李杰"
v1 = name.encode(encoding='utf-8') # 字节类型
print(v1)
v2 = name.encode(encoding='gbk') # 字节类型
print(v2)

9. 找到制表符\t,进行替换为固定的宽度(包含制表符前面的值),用于打印出宽度一致的表格。
PS: \n
name = "al\te\tx\nalex\tuu\tkkk"
v = name.expandtabs(20)
print(v)

10. 找到指定子序列的索引位置:不存在返回-1
name = 'alex'
v = name.find('i')
print(v)
v = name.index('i')     #index方法如果子序列不存在程序报错
print(v)

11. 字符串格式化

tpl = "我是:%s;年龄:%s;性别:%s"   # 使用百分号占位符,然后再传入参数

tpl = "我是:{0};年龄:{1};性别:{2}"    # 使用位置参数
v = tpl.format("李杰",19,'都行')
print(v)

tpl = "我是:{name};年龄:{age};性别:{gender}"  #使用命名变量
v = tpl.format(name='李杰',age=19,gender='随意')
print(v)

tpl = "我是:{name};年龄:{age};性别:{gender}" 
v = tpl.format_map({'name':"李杰",'age':19,'gender':'中'})     #使用命名变量,但format_map方法传入的值是字典格式
print(v)


12. 是否是数字、汉字.
name  = 'alex8汉字'
v = name.isalnum() # 字,数字
print(v)    # True
v2 = name.isalpha()#
print(v2)   # False

13. 判断是否是数字
num = '②'
v1 = num.isdecimal() # 只包含'123'
v2 = num.isdigit()   # 包含'123','②'
v3 = num.isnumeric() # 包含'123','二','②'
print(v1,v2,v3)


14. 是否是标识符
n = 'name'
v = n.isidentifier()
print(v)

15. 是否全部是小写以及是否全部是大写
name = "ALEX"
v = name.islower()
print(v)
v = name.isupper()
print(v)

16. 将字母全部变大写,
name = 'alex'
v = name.upper()  # lower()
print(v)

17.是否包含隐含的xx
name = "钓鱼要钓刀鱼,\n刀鱼要到岛上钓"
v = name.isprintable()
print(v)

18.是否全部是空格
name = '    '
v = name.isspace()
print(v)


19.元素拼接(元素字符串) *****
name = 'alex'

v = "_".join(name) # 内部循环每个元素,将每个元素后面加上下划线,除最后一个例外
print(v)

name_list = ['海峰','杠娘','李杰','李泉']
v = "搞".join(name_list)
print(v)

20. 左右填充
center,rjust,ljust
name = 'alex'
v = name.rjust(20,'*')
print(v)

21. 对应关系 + 翻译
m = str.maketrans('aeiou','12345') # 对应关系

name = "akpsojfasdufasdlkfj8ausdfakjsdfl;kjer09asdf"
v = name.translate(m)
print(v)

22. 分割,保留分割的元素
content = "李泉SB刘康SB刘一"
v = content.partition('SB') # partition
print(v)

    分割,不保留分割的元素
content = "李泉SB刘康SB刘一"
v = content.partition('SB')
print(v)

23. 替换
content = "李泉SB刘康SB刘浩SB刘一"
v = content.replace('SB','Love')    #全部替换
print(v)
v = content.replace('SB','Love',1)  #从找到的SB中的第二个可以替换
print(v)

24. 移除空白,\n,\t,自定义
name = 'alex\t'
v = name.strip() # 空白,\n,\t
print(v)

25. 大小写转换
name = "Alex"
v = name.swapcase()
print(v)

26. 在字符串前面填充0
name = "alex"
v = name.zfill(20)      #加上字符串本身,长度为20
print(v)

27. 字符串拼接
v1 = 'alex'
v2 = 'eric'
v = v1 + v2 # 执行v1的__add__功能
print(v)


#### 字符串功能总结:
name = 'alex'
name.upper()
name.lower()
name.split()
name.find()
name.strip()
name.startswith()
name.format()
name.replace()
"alex".join(["aa",'bb'])

#### 字符串额外功能:
name = "alex"
name[0]
name[0:3]
name[0:3:2]
len(name)
for循环,每个元素是字符


练习题
name = "aleX"
v = name.strip()
print(v)
v = name.startswith('al')
print(v)
v = name.replace('l','p')
print(v)

v = name.split('l')
print(v) # 输出结果为列表


################# int 整数 #################

1. 当前整数的二进制表示,最少位数
age = 4 # 100
print(age.bit_length())

2. 获取当前数据的字节表示
age = 15
v = age.to_bytes(10,byteorder='big')
v = age.to_bytes(10,byteorder='little')
print(v)
00000000 00001111 -> 15

################# bool 布尔值 ###############
1 True
0 False

bool(1111)

v = 0 # 1,-1
v = ""
v = []
--> 空内容:False

################# list 列表 #################

user_list = ['李泉','刘一','刘康','豆豆','小龙'] # 可变类型
PS:
  # name = 'alex'
执行功能;
1.追加
user_list = ['李泉','刘一','刘康','豆豆','小龙'] # 可变类型
user_list.append('刘铭')
print(user_list)

2. 清空
user_list = ['李泉','刘一','刘康','豆豆','小龙'] # 可变类型
user_list.clear()
print(user_list)

3. 拷贝(浅拷贝)
user_list = ['李泉','刘一','刘康','豆豆','小龙'] # 可变类型
v = user_list.copy()
print(v)
print(user_list)

4. 计数
user_list = ['李泉','刘一','李泉','刘康','豆豆','小龙'] # 可变类型
v = user_list.count('李泉')
print(v)

5. 扩展原列表
user_list = ['李泉','刘一','李泉','刘康','豆豆','小龙'] # 可变类型
user_list.extend(['郭少龙','郭少霞'])
print(user_list)

6. 查找元素索引,如果元素不存在,就会报错
user_list = ['李泉','刘一','李泉','刘康','豆豆','小龙'] # 可变类型
v = user_list.index('李海')
print(v)

7. 删除并且获取元素 - 参数为索引
user_list = ['李泉','刘一','李泉','刘康','豆豆','小龙'] # 可变类型
v = user_list.pop(1)
print(v)
print(user_list)

8. 删除 - 参数为列表元素的值
user_list = ['李泉','刘一','李泉','刘康','豆豆','小龙'] # 可变类型
user_list.remove('刘一')
print(user_list)

9. 翻转
user_list = ['李泉','刘一','李泉','刘康','豆豆','小龙'] # 可变类型
user_list.reverse()
print(user_list)

10. 排序: 欠参数
nums = [11,22,3,3,9,88]
print(nums)
排序,从小到大
nums.sort()
print(nums)
从大到小
nums.sort(reverse=True)
print(nums)

####  列表额外功能:
user_list = ['李泉','刘一','李泉','刘康','豆豆','小龙']
user_list[0]
user_list[1:5:2]
del user_list[3]
for i in user_list:
    print(i)
user_list[1] = '姜日天'
user_list = ['李泉','刘一','李泉','刘康','豆豆',['日天','日地','泰迪'],'小龙']

li = ['eric','alex','tony']
v = len(li)
print(v)

li.append('seven')
print(li)

li.insert(0,'Tony')
print(li)

li[1] = 'Kelly'

li.remove('eric')
print(li)

v = li.pop(1)
print(v)
print(li)

del li[2]

del li[0:2] # 0 =<x < 2
print(li)

li.reverse()
print(li)

for i in li:
    print(i)

################range,enumrate 功能说明################
1. 请输出1-10
python2.7: 立即生成所有数字
range(1,11) # 生成 1,2,3,4,5,6...10

python3.x: 不会立即生成,只有循环迭代时,才一个一个生成
for i in range(1,11): #
    print(i)

for i in range(1,11,2): #
    print(i)

for i in range(10,0,-1): #
    print(i)

示例
"
  - 2.7:
      range()
      xrange()  不会立生成,迭代之后才一个一个创建;
  - 3.x
      range()  不会立生成,迭代之后才一个一个创建;
"
2. range: 三个参数

li = ['eric','alex','tony']
# range,len,li循环
for i in range(0,len(li)):
    ele = li[i]
    print(ele)

li = ['eric','alex','tony']
for i in li:
    print(i)

for i in range(0,len(li)):
    print(i+1,li[i])

3. enumerate额外生成一列有序的数字
li = ['eric','alex','tony']
for i,ele in enumerate(li,1):
    print(i,ele)

v = input('请输入商品序号:')
v = int(v)
item = li[v-1]
print(item)

################### tuple:元组,不可被修改的列表;不可变类型 ####
user_tuple = ('alex','eric','seven','alex')
1. 获取个数
v = user_tuple.count('alex')
print(v)
2.获取值的第一个索引位置
v = user_tuple.index('alex')
print(v)

##### 额外:
user_tuple = ('alex','eric','seven','alex')
for i in user_tuple:
    print(i)

v = user_tuple[0]
v = user_tuple[0:2]
print(v)

user_tuple = ('alex','eric','seven',['陈涛','刘浩','赵芬芬'],'alex')
user_tuple[0] = 123          #错误操作,子元素不可变
user_tuple[3] = [11,22,33]   #错误操作,子元素虽然是一个列表(可变类型),但作为子元素整体不可变
user_tuple[3][1] = '刘一'    #正确操作,元组中的子元素(元组儿子)不可变,子元素如果是可变类型的话,子元素的子元素(元组孙子)可变
print(user_tuple)

li = ['陈涛','刘浩',('alex','eric','seven'),'赵芬芬']

****** 新建元组时,如果元组只有1个元素,元组最后,加逗号 ******
li = ('alex',)
print(li)

##################### dict:字典: 可变类型 #######

1. 清空、
dic = {'k1':'v1','k2':'v2'}
dic.clear()
print(dic)

2. 浅拷贝
dic = {'k1':'v1','k2':'v2'}
v = dic.copy()
print(v)

3. 根据key获取指定的value;如果不存在不会报错
dic = {'k1':'v1','k2':'v2'}
v = dic.get('k1111',1111)
print(v)
v = dic['k1111']
print(v)

4. 删除并获取对应的value值
dic = {'k1':'v1','k2':'v2'}
v = dic.pop('k1')
print(dic)
print(v)

5. 随机删除键值对,并获取到删除的键值
dic = {'k1':'v1','k2':'v2'}
v = dic.popitem()
print(dic)
print(v)

k,v = dic.popitem() # ('k2', 'v2')
print(dic)
print(k,v)

v = dic.popitem() # ('k2', 'v2')
print(dic)
print(v[0],v[1])

6. 增加键值对,如果存在则不做操作
dic = {'k1':'v1','k2':'v2'}
dic.setdefault('k3','v3')
print(dic)
dic.setdefault('k1','1111111')
print(dic)

7. 批量增加或修改(key存在则修改该key的值)
dic = {'k1':'v1','k2':'v2'}
dic.update({'k3':'v3','k1':'v24'})
print(dic)

8. fromkeys静态方法,批量增加键值对,如下方法创建的字典,所有的key指向的value都是123,并且value的内存地址相同(即同一个对象),如果修改1个,其他的key的value都会被修改
dic = dict.fromkeys(['k1','k2','k3'],123)
print(dic)
dic = dict.fromkeys(['k1','k2','k3'],123)
dic['k1'] = 'asdfjasldkf'
print(dic)

dic = dict.fromkeys(['k1','k2','k3'],[1,])
{
   k1: 123123213, # [1,2]
   k2: 123123213, # [1,]
   k3: 123123213, # [1,]
}
dic['k1'].append(222)
print(dic)
9. ########## 字典额外功能:
- 字典可以嵌套
- 字典key: 必须是不可变类型
dic = {
    'k1': 'v1',
    'k2': [1,2,3,],
    (1,2): 'lllll',
    1: 'fffffffff',
    111: 'asdf',
}
print(dic)

key:
    - 不可变
    - True,1

dic = {'k1':'v1'}
del dic['k1']

10. 字典循环
dic = {'k1':'v1','k2':'v2'}
for item in dic:
    print(item) # k1   k2

for item in dic.keys():
    print(item) # k1   k2

for item in dic.values():
    print(item) # v1   v2

for k,v in dic.items():
    print(k,v)


################# set,集合,不可重复的列表;可变类型 #########
s1 = {"alex",'eric','tony','李泉','李泉11'}
s2 = {"alex",'eric','tony','刘一'}

1. s1中存在,s2中不存在
v = s1.difference(s2)
print(v)
#### s1中存在,s2中不存在,然后对s1清空,然后再重新赋值
s1.difference_update(s2)
print(s1)

2. s2中存在,s1中不存在
v = s2.difference(s1)
print(v)

3. s2中存在,s1中不存在
s1中存在,s2中不存在
v = s1.symmetric_difference(s2)
print(v)

4. 交集
v = s1.intersection(s2)
print(v)

5. 并集
v = s1.union(s2)
print(v)

6. 移除
s1 = {"alex",'eric','tony','李泉','李泉11'}
s1.discard('alex')
print(s1)

s1 = {"alex",'eric','tony','李泉','李泉11'}
s1.update({'alex','123123','fff'})
print(s1)
##### 集合额外功能:

s1 = {"alex",'eric','tony','李泉','李泉11'}
for i in s1:
    print(i)

s1 = {"alex",'eric','tony','李泉','李泉11',(11,22,33)}
for i in s1:
#   print(i)

################# 本周作业 ##########
"""
# 1. 练习题两个试卷:readme
# 2. 购物系统
    - 个人账户,文件: user,pwd,3,余额
    - 商品,文件
    - 查看商品分页显示:
        li = [
            {...}
            {...}
            {...}
            {...}
            {...}
            {...}
            {...}
        ]
        p = int(input('请输入页码:'))
        start = (p -1) * 10
        end = p * 10
        v1 = li[start:end]
        for i v1:
            print(i)
    - 个人购物记录,文件
        查看:娃娃
    if "al" in "alex":
        pass
"""
open()
0 0
原创粉丝点击