基础数据类型的补充

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. XStream实现javabean和xml、json转化

    xStream转换XML.Json数据 xStream可以轻易的将javaBean对象和xml相互转换,修改某个特定的属性和节点名称,而且也支持json的转换. maven依赖: 1 <depe ...

  2. 【转】在Linux下搭建Git服务器

    在 Linux 下搭建 Git 服务器 环境: 服务器 CentOS6.6 + git(version 1.7.1)客户端 Windows10 + git(version 2.8.4.windows. ...

  3. node学习之路

    现阶段开始学习使用node开发一个个人博客系统,nodejs 基于V8引擎,是一个让 JavaScript 运行在服务端的开发平台,功能强大 ,Node.js 可以作为服务器向用户提供服务,它跳过了 ...

  4. numpy库使用总结

    numpy study 0x01:n维数组对象ndaarray 存放同类型元素的多维数组 0x02:numpy数据类型 numpy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符,包括 ...

  5. Centos7 快速安装Docker

    写在前面 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以轻松批量地在生产环境中部署. 网上的安装教程也很多这里我推 ...

  6. 教你用开源 JS 库快速画出 GitHub 章鱼猫

    本文作者:HelloGitHub-kalifun 在上一篇文章我们介绍了 Zdog 如何使用,接下来这篇文章我将带领各位利用 Zdog 画出一个 GitHub 章鱼猫(和官方的还是有些差别的). Zd ...

  7. poj-2232 New Stone-Forfex-Cloth Game 思维题

    Acm is a clever boy, and he developed a new game form the old Stone-Forfex-Cloth game. In this game, ...

  8. Fork/Join 框架框架使用

    1.介绍 Fork/Join 框架是 Java7 提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架.在多核计算机中正确使用可以很好的 ...

  9. 阿里云服务器CentOS6.9安装SVN

    1.安装SVN yum -y install subversion 出现Complete表明安装成功 2.创建SVN仓库目录 mkdir -p /data/svn/repositories/yyksv ...

  10. 2019-ccpc秦皇岛现场赛

    https://www.cnblogs.com/31415926535x/p/11625462.html 昨天和队友模拟了下今年秦皇岛的区域赛,,,(我全程在演 题目链接 D - Decimal 签到 ...