基础数据类型的补充

str:

首字母大写
name = 'alexdasx'
new_name = name.capitalize()
print(new_name)
通过元素查找下标 从左到右 只查找一个
name = 'alexdasx'
new_name = name.find('e')
print(new_name)
# print(name.find("b"))  #find查找不存在的返回-1
查找 从左向右 只查找一个
name = "alelx"
print(name.index("l"))   #index查找不存在的就报错
每个单词首字母大写
name = 'alex_wusir'
print(name.title())
内容填充
name = 'alex_wusir'
print(name.center(50))      #默认以空格填充
#print(name.center(50,"*")) #以*号填充
大小写反转
name = 'alex_wusir'
print(name.swapcase())

join()拼接

name = "alex"
print("_".join(name))

format("字符") (字符串格式化)

name = 'alexdsb{}'
new_name = name.format('说的对')
print(new_name)
# 字符串格式化 

结果:
alexdsb说的对
# 格式化
# 1.%s
# 2.f
# 3.name.format()
# name = "alex{},{},{}"
# print(name.format(1,2,3)) # 按照顺序位置进行填充
# name = "alex{2},{0},{1}"
# print(name.format("a","b","c")) # 按照索引值进行填充
# name = "alex{a},{b},{c}"
# print(name.format(a=1,c=11,b=67)) # 按照关键字进行填充
+ * 开辟新的空间
# name = "alex"
# name1 = "wusir"
# print(id(name))
# print(id(name1))
# print(id(name + name1))

list:

# 定义方式:
lst = list("123")       #迭代添加
print(lst)

结果:
['1', '2', '3']
1.reverse() (反转)
lst = ['章超印','周道镕','朱宇凡','杨红兴']
lst.reverse()  # 把这个列表进行调转
print(lst)

结果:
['杨红兴', '朱宇凡', '周道镕', '章超印']
2.sort() (排序)
lst = [9, 8, 7, 6, 5, 4, 3, 2, 1]
lst.sort()      #升序 排序
print(lst)

结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]

lst = [1,2,3,4,5,6,7,8,9]
lst.sort(reverse=True)  # 降序 排序
print(lst)

结果:
[9, 8, 7, 6, 5, 4, 3, 2, 1]
3.count() (统计)
lst = [1, 2, 3, 4, 5, 3, 7, 3, 9]
num = lst.count(3)  # 统计元素3出现的次数,和字符串中功能一样
print(num)

结果:
3
4.index() (通过元素获取下标)
lst = [1,2,3,4,84,4,5,2,8,2,11,88,2]
n = lst.index(5)    #查找5的下标
print(n)

结果:
6

面试题:

#面试题:
# lst = [[]]
# new_lst = lst * 5
# new_lst[0].append(10)
# print(new_lst)

结果:
[[10],[10],[10],[10],[10]]

# lst = [1,[]]
# new_lst = lst * 5
# new_lst[0] = 10
# print(new_lst)

结果:
[10,[],1,[],1,[],1,[],1,[]]

# lst = [1,[]]
# new_lst = lst * 5
# new_lst[1] = 10
# print(new_lst)

结果:
[1,10,1,[],1,[],1,[],1,[]]

用一行代码把一个列表的所有元素加入另一个列表
# 方式一:
# lst.extend(lst1)
# print(lst)
# 方式二:
# print(lst+lst1)
# new_lst = lst * 5
# print(id(new_lst[0]), id(new_lst[0]))

# lst = [[]]
# new_lst = lst * 5
# new_lst[0].append(10)
# print(new_lst)

结果:
[[10],[10],[10],[10],[10]]

tuple:

# tu = ("12")  # 数据类型是()中数据本身
# print(type(tu))

# tu = (1,)   # (1,)是元组
# print(type(tu))
元组 的 + * 不可变共用,可变也共用

dict:

# 定义一个字典:
# print(dict(k=1,k1=2))

结果:
{'k': 1, 'k1': 2}
# 随机删除: popitem
# dic = {"key":1,"key2":2,"key3":56}
# print(dic.popitem())  # 返回的是被删除的键值对(键,值)
# print(dic)
# python36 默认删除最后一个

# dic = {}
# dic.fromkeys("123",[23]) # 批量添加键值对{"1":[23],"2":[23],"3":[23]}
# print(dic)

# dic = dict.fromkeys("123456789",1) # 批量添加键值对"键是可迭代对象",值 -- 会被共用
# dic["1"] = 18
# print(dic)

set:

# set() -- 空集合
# {} -- 空字典
# 定义集合:
# set("alex")  # 迭代添加的

bool:

# bool: False
# 数字: 0
# 字符串: ""
# 列表:[]
# 元组:()
# 字典:{}
# 集合: set()
# 其他: None

数据类型之间转换

类型转换:

  元组 => 列表 list(tuple)

  列表 => 元组 tuple(list)

  list=>str str.join(list)

  str=>list str.split()

​ dict => str str(dict)

# dict -- str
# dic = {"1":2}
# print(str(dic),type(str(dic)))

python数据类型:

# 可变:
# list ,dict ,set
# 不可变:
# int bool str tuple
# 有序:
# list,tuple,str,int,bool
# 无序:
# dict,set
# 取值方式:
# 索引: str list tuple
# 直接: set ,int ,bool
#   键: dict 

那一年,我们遇见的坑

lst = [1,2,3,4,5,6]
for i in lst:
    lst.append(7) # 这样写法就会一直持续添加7
    print(lst)
print(lst)

结果:
[1,2,3,4,5,6,7,7,7,7,7,7*************]
# 这样写法就会一直持续添加7
remove()删除
li = [11, 22, 33, 44,55,66,77]
for e in li:
    print(e)
    li.remove(e)
print(li)

结果:
11
33
55
77
[22, 44, 66]

分析原因: for的运⾏过程. 会有⼀个指针来记录当前循环的元素是哪⼀个, ⼀开始这个指针指向第0 个.然后获取到第0个元素. 紧接着删除第0个. 这个时候. 原来是第⼀个的元素会⾃动的变成 第0个.然后指针向后移动⼀次, 指向1元素. 这时原来的1已经变成了0, 也就不会被删除了.

del()删除:
li = [11, 22, 33, 44]
for i in range(0, len(li)):
    del li[i]
print(li)
结果: 报错
# i= 0, 1, 2 删除的时候li[0] 被删除之后. 后⾯⼀个就变成了第0个.
# 以此类推. 当i = 2的时候. list中只有2个元素. 但是这个时候删除的是第2个 肯定报错啊
pop()删除:
li = [11, 22, 33, 44]
for i in range(0, len(li)):
    li.pop(i)
    print(li)
print(li)

结果:
Traceback (most recent call last):
  File "H:/Python代码文件/python24期/test.py", line 930, in <module>
    li.pop(i)
IndexError: pop index out of range
[22, 33, 44]
[22, 44]

结果发现pop(),remove(),del()都不能循环删除

只能这样才可以:

li = [11, 22, 33, 44]
for i in range(0, len(li)): # 循环len(li)次, 然后从后往前删除
    d = li.pop()
    print(">>>",d)
print(li)

结果:
>>> 44
>>> 33
>>> 22
>>> 11
[]
li = [11, 22, 33, 44]
del_li = []
for e in li:
    del_li.append(e)
print(del_li)
for e in del_li:
    li.remove(e)    # li列表从前面往后删除(先删除11,然后22.....)
print(li)

结果:
[11, 22, 33, 44]
[]

注意: 由于删除元素会导致元素的索引改变, 所以容易出现问题. 尽量不要再循环中直接去删除元素. 可以把要删除的元素添加到另⼀个集合中然后再批量删除.

dict中的元素在迭代过程中是不允许进⾏删除的
dic = {'k1': 'alex', 'k2': 'wusir', 's1': '⾦⽼板'}
# 删除key中带有'k'的元素
for k in dic:
    if 'k' in k:
        del dic[k] # dictionary changed size during iteration, 在循环迭代的时候不允许进⾏删除操作
print(dic)

解决方案:把要删除的元素暂时先保存在⼀个list中, 然后循环list, 再删除

dic = {'k1': 'alex', 'k2': 'wusir', 's1': '⾦⽼板'}
dic_del_list = []
# 删除key中带有'k'的元素
for k in dic:
    if 'k' in k:
        dic_del_list.append(k)
for el in dic_del_list:
    del dic[el]
print(dic)

以后会遇见的坑:

# lst = [1,2]
# for i in lst:
#     lst.append(3)
# print(lst)  # 死循环

# 删除列表的坑

# lst = [1,2,3,4]
# for i in lst:
#     lst.pop()
# print(lst)

# lst = [1,2,3,4]
# for i in lst:
#     lst.pop(0)
# print(lst)

# lst = [1,2,3,4]
# for i in lst:
#     lst.remove(i)
# print(lst)

# 成功删除的方式:
# lst = [1,2,3,4,6]
# for i in range(len(lst)):
#     lst.pop()
# print(lst)

# lst = [1,2,3,4,6]
# for i in range(len(lst)-1,-1,-1):
#     del lst[i]
# print(lst)

# lst = [1,2,3,4,6]
# for i in range(len(lst)):
#     del lst[-1]
# print(lst)

# lst = [1,2,3,4,5,6]
# lst1 = lst.copy()
# for i in lst1:
#     lst.remove(i)
# print(lst)

# 删除字典的坑

# dic = dict.fromkeys("12345",1)  # 字典的迭代的时候改变了原来的大小(不能加不能删)
# for i in dic:
#     dic[i] = "123"
# print(dic)

# dic = dict.fromkeys("12345",1)
# dic1 = dic.copy()
# for i in dic1:
#     dic.pop(i)
# print(dic)

# 集合和字典都是迭代的时候不能改变原来的大小

二次编码

# 密码本:
# ascii  -- 没有中文
# gbk    -- 英文 8b(位) 1B(字节) 中文 16b 2B
# unicode -- 英文16b 2B  中文32b 4B
# utf-8 --   英文8b 1B  欧洲16b 2B  亚洲24b 3B

# name = "你好啊"
# s1 = name.encode("utf-8") # 编码  9
# s2 = name.encode("gbk") # 编码  6
# s2 = s1.decode("utf-8") # 解码
# print(s2.encode("gbk"))

# 以什么编码集(密码本)进行编码就要用什么编码集(密码本)解码

encode() #编码

decode() #解码

在python3的内存中. 在程序运⾏阶段. 使⽤的是unicode编码.
用什么编码就用什么来解码

因为unicode是万国码. 什么内容都可以进⾏显⽰. 那么在数据传输和存储的时候由于unicode比较浪费空间和资源.需要把 unicode转存成UTF-8或者GBK进⾏存储. 怎么转换呢.

在python中可以把⽂字信息进⾏编码. 编码之后的内容就可以进⾏传输了.

编码之后的数据是bytes类型的数据.其实啊. 还是原来的数据只是经过编码之后表现形式发⽣了改变⽽已.

bytes的表现形式:

​ 英⽂ b'alex' 英⽂的表现形式和字符串没什么两样

​ 中⽂ b'\xe4\xb8\xad' 这是⼀个汉字的UTF-8的bytes表现形式

s = "alex"
print(s.encode("utf-8")) # 将字符串编码成UTF-8
print(s.encode("GBK")) # 将字符串编码成GBK
结果:
b'alex'
b'alex'

s = "中"
print(s.encode("UTF-8")) # 中⽂编码成UTF-8
print(s.encode("GBK")) # 中⽂编码成GBK
结果:
b'\xe4\xb8\xad'
b'\xd6\xd0'
s = "我叫章超印"
print(s.encode("utf-8"))
print(b'\xe6\x88\x91\xe5\x8f\xab\xe7\xab\xa0\xe8\xb6\x85\xe5\x8d\xb0'.decode("utf-8"))  #解码

结果:
b'\xe6\x88\x91\xe5\x8f\xab\xe7\xab\xa0\xe8\xb6\x85\xe5\x8d\xb0'
我叫章超印

编码和解码的时候都需要制定编码格式.

s = "我是章超印"
bs = s.encode("GBK")
# 我们这样可以获取到GBK的⽂字
# 把GBK转换成UTF-8
# ⾸先要把GBK转换成unicode. 也就是需要解码
s = bs.decode("GBK") # 解码
# 然后需要进⾏重新编码成UTF-8
bss = s.encode("UTF-8") # 重新编码
print(bss)

百万年薪python之路 -- 基础数据类型的补充的更多相关文章

  1. 百万年薪python之路 -- 基础数据类型的补充练习

    1.看代码写结果 v1 = [1,2,3,4,5] v2 = [v1,v1,v1] v1.append(6) print(v1) print(v2) [1,2,3,4,5,6] [[1,2,3,4,5 ...

  2. 百万年薪python之路 -- 基本数据类型

    整数 -- 数字(int) 用于比较和运算 32位 2 ** 31 ~ 2 ** 31-1 64位 -2 ** 63 ~ 2 ** 63- 1 ​ + - * / // ** % python2 整型 ...

  3. 百万年薪python之路 -- 基本数据类型练习

    1.代码敲一遍,然后整理笔记 2.有变量name = "aleX leNb" 完成如下操作: 移除 name 变量对应的值两边的空格,并输出处理结果 name = "al ...

  4. python之路--基础数据类型的补充与深浅copy

    一 . join的用法 lst =['吴彦祖','谢霆锋','刘德华'] s = '_'.join(lst) print(s) # 吴彦祖_谢霆锋_刘德华 # join() "*" ...

  5. Python之路-基础数据类型之列表 元组

    列表的定义 列表是Python基础数据类型之一,它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各种数据类型: lst = [1,2,'你好','num'] 列表的索引和切片 与字符串类似, ...

  6. 百万年薪python之路 -- 列表

    1.列表(list)-- list关键字 列表是python的基础数据类型之一,有顺序,可以切片方便取值,它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各种数据类型(字符串,数字,布尔值, ...

  7. Python之路-基础数据类型之字典 集合

    字典的定义-dict 字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成,字典是无序的,key是不可修改的.dic = {1:'好',2:'美',3:'啊'} 字典的操 ...

  8. 百万年薪python之路 -- 小数据池和代码块

    1.小数据池和代码块 # 小数据池 -- 缓存机制(驻留机制) # == 判断两边内容是否相等 # a = 10 # b = 10 # print(a == b) # is 是 # a = 10 # ...

  9. 百万年薪python之路 -- JS基础介绍及数据类型

    JS代码的引入 方式1: <script> alert('兽人永不为奴!') </script> 方式2:外部文件引入 src属性值为js文件路径 <script src ...

随机推荐

  1. MIT FiveK图像转化--DNG到TIFF,TIFF到JPEG

    MIT FiveK图像转化--DNG到TIFF,TIFF到JPEG MIT FiveK数据库是研究图像自动修饰算法会用到的基准数据库,然而那个网页上提供给我们的5000张原始图像的格式为DNG格式(一 ...

  2. Redis数据库之编程项目及练习资源

    实训项目 :   NOSQL数据库设计与应用实训         注释:   Redis数据库编程项目示例及练习资源 项目源码获取: https://pan.baidu.com/s/19f0F7cmx ...

  3. 23种设计模式之适配器模式(Adapter Pattern)

    适配 即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口.例如:二转换为三箱插头,将高电压转换为低电压等. 动机(Motivate):    在软件系统中,由于应用环境的变化,常常需要将“ ...

  4. cvc-complex-type.2.3: Element 'dependency' cannot have character [children], because the type's cont

    直接复制网上的pom引入,报错 解决:自己手动输入一遍,不用直接复制,因为复制的时候,项目中编码跟网页上编码不一致,很容易导致出问题.

  5. 基 B/S 平台的机房监控云平台-U位篇

    前言 机柜 U 位管理是一项突破性创新技术--继承了 RFID 标签(电子标签)的优点的同时,完全解决了 RFID 技术(非接触式的自动识别技术)在机房 U 位资产监控场应用景中的四大缺陷,采用工业互 ...

  6. 虚拟机中设置 CentOS 静态 IP

    作为开发人员在工作和学习中通过虚拟机使用 Linux 的情况肯定会非常多,但是 Linux 自带的终端使用体验较差,所以绝大多数使用者都会在宿主机上使用第三方 SSH工具(例如 Xshell)进行连接 ...

  7. 死磕 java线程系列之自己动手写一个线程池

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...

  8. Redis Cluster 原理相关说明

    背景 之前写的 Redis Cluster部署.管理和测试 和 Redis 5.0 redis-cli --cluster help说明 已经比较详细的介绍了如何安装和维护Cluster.但关于Clu ...

  9. Kafka 学习笔记之 Kafka0.11之producer/consumer(Scala)

    Kafka0.11之producer/consumer(Scala): KafkaConsumer: import java.util.Properties import org.apache.kaf ...

  10. Python调用 Openstack 主要服务(keystone,nova,glance,neutron,heat)

    由于Openstack更新很快,现在准备搭建基于Queen版本的Openstack,Queen版本要求keystone版本为V3,所以之前大多数接口都不能用了,百度了一下都没有比较新的实例,官方文档又 ...