Python内容拾遗

作者:编程技术

(1)、字符串转换成列表
举例:
a = '小白'
a1 = list(a)---------------------------这时的a在括号的内部相当于一个for的循环
print(a1)
输出结果: ['小', '白']

str:
str()
str类 init
list:
list()
list 类 init

b、共有的特性
都可以索引--------------------对于索引索引之后一定是个元素
都可以切片--------------------对于切片如果切片之前是字符那么切片之后也是字符,如果之前是列表那么之后也是列表
都可以for循环

2.1 int
2.1.1 创建对象的两种方式:
n1 = 123 #自动执行 int 类中的init()方法 n1= int.init(123)
n2 = int(123) #int名称后加一个() 默认执行类中的该功能

(2)、将字节转换成字符串
a = '小白'
n1 = bytes(a ,encoding='utf-8')
n2 = bytes(a ,encoding='gbk')
new1 = str(n1,encoding="utf-8")
new2 = str(n2 ,encoding='gbk')
print(new1,new2)
输出结果:
小白 小白
总结:Bytes可以强制定义创建字节,也可以用来对其他类型进行转换到字节
Str可以强制定义一个字符串,也可以用来对其他类型的对象转换到字符串
对于汉子utf-8是以三个字节来存储的而GBK是以两个字节来存储的

b 列表

li = list()

li.append(“aaa”)#

print(li)

li.clear() #将列表清空
print(li) #[]

lis=[‘aaa’,’ddd’]

li.extend(lis) #将另一个可迭代的东西扩展到后面
#可迭代的包括:字典,数组,字符串,列表

print(li)

li.reverse(); #自身内部元素翻转
print(li)

li.insert(1,”wang”) #x项指定位置插入元素
print(li)

print(li[2]) #索引是取多个东西,并将其放入一个对象中

print(li[2:3])

li =[“liex”,123,{“name”:”wang”,”age”:123,”k2”:{“k3”:456}}]

li[2]#获取到的是一个字典

print(li[2][‘k2’]) #字典是通过key取值的。

li[2][“k2”][“k3”]

a.创建方式
s1 = "rasir"
s2 = str("rasir")
b.特有功能,一般需要记住的
s1.strip()----------------------------移除字符串两端的空格
s1.startswith()----------------------查找字符串中,关与自己查找的是否相同
s1.find()-----------------------------查找字符串中某个字符
s1.replace()-------------------------将字符串中某个序列替换成自己想要替换的字符
s1.upper()---------------------------将字符串的所有字母变成大写
s1.isapha()---------------------------查找字符串中是否只有字母如果只有字母则返回True否则返回False

utf-8—–>3个字节

2、字符串、str

以gbk 编码的,一个是2个字节汉字一个字节8位

name2=”李璐” # 在2.7中以字节形式输出,出现了六行乱码,说明两个汉字就是6个字节 就是六行
for i in name2:
print i

name2 = “李璐” # 在3.5中以字符的形式输出,出现了两行中文,说明两个汉字就是两个字符
for i in name2: #3.5中循环的是每个字符。
print(i)
print(bytes(i,encoding=”gbk”))

对于前几天数据类型的补充
1、整形int
a.几种输入的方法
a = 123
a = int(123)
对于当我们在设备上输入a = 123时其实Python内部他们会把他转换为int(123),对于后面的括号在Python的内部其实是调用了__init__

print s1.index(‘e’,0,len(s1)-1)

d. str与Bytes的转换
(1)、将字符串转换为字节
a = '小白'
n1 = bytes(a ,encoding='utf-8')
n2 = bytes(a ,encoding='gbk')
print(n1)
print(n2)
输出结果:
b'xe5xb0x8fxe7x99xbd'
b'xd0xa1xb0xd7'

往字典中加入一个元素

c=dict({‘k1’:’wang’})
c.update({‘k2’:’123’}) #将原来的字典进行更新

c[‘k3’]=456 # 为相应的’k3’ 这个key 进行赋值,如果没有相应的key 则会至今进行创建
print(c)

dic = {‘k1’:123,’k2’:456,’k3’:789}
n=dic.fromkeys([‘k1’,’k2’,’k3’],”alex”)
print(n)

print(dict.fromkeys([‘k1’,’k2’,’k3’]))

n2={‘k1’:[],’k2’:[]}
print(n2)
n2[‘k1’].append({‘k3’:’wangwang’})
print(n2)

列表到字符串

   n1=123
   n2=123     肯定用两份内存地址

    Python对内存的优化:默认在-5~257之间,共同用一份内存地址

(3)、将字典转换为列表
举例:
a = {'rain':'sir',
'yan':'sea'}
a1 = list(a)
a2 = list(a.values())
a3 = list(a.items())
print(a1)
print(a2)
print(a3)
输出结果:
['rain', 'yan']
['sir', 'sea']
[('rain', 'sir'), ('yan', 'sea')]

字符 ——》字节

bytes_lists=bytes(“李璐”,encoding=”utf-8”)

b.int的内部优化
像下面这种情况他们在内存里是共用一块地址的:
n1 = 123
n2 = n1
对于下面这种情况他们在内存里使用不同的地址来存储
n1 = 123
n2 = 123
但是在Python的内部他会把-5----127之间的数做一个优化,认为他们是常用的数字,所以在程序中他们还是会使用同内存地址来存储

下划线的都是内部自动执行的。
2.1.2
n1=123
n2=n1 肯定用一份内存地址

b、基本的特性
n1.fromkeys()--------------------------------------------------用来创建一个新的字典

切片取多个元素,索引取出一个元素

print type(s1[0:1])#

如果一个方法的上面有staticmethod这上单词那么这个是用类来调用的,像平常我们一般是用对象来调用方法
举例:
n1 = dict.fromkeys(['k1','k2','k3'],[])
print(n1)
n1["k1"].append('bbb')
print(n1)
输出结果:
{'k1': [], 'k2': [], 'k3': []}
{'k1': ['bbb'], 'k2': ['bbb'], 'k3': ['bbb']}
总的结:
对于fromkeys来说后面所创建的vlan值他们使用的是同一个内存地址。这也就解释了为什么在对于k1的Value值添加之后其他的都添加了

n1=123
n2=123
print id(n1) #id(对象或者对象的变量名) 用来查看对象的内存地址
print id(n2)
39042368
39042368

5、字典、dict
a、创建和转换
n1 = {'rain':'sir','tan':'aaa'}
n1 = dict({'rain':'sir','tan':'aaa'})

  2.1.3 长度限制
 int  根据计算机位数多少指定长度 
  32位   -2**31 ~  2**31 -1
  64位   -2**63  ~ 2**63 -1
 long 

  str :
      s1="alex"
      s2=str("alex") 

a1 = ['rain','sir']

1.1运算符
in eg: print “hello” in “sdsfdhello” #True

(2)、将元组转换为列表
举例:
a = ('cui','rain','sir')
a1= list(a)----------------------------------------------------for循环,将每一个循环的元素当做列表的元素
print(a1)
输出结果:
['cui', 'rain', 'sir']

将字符串转换成字节

b1=bytes(a,encoding=”utf-8”)
print(b1) #b’xe6x9dx8exe7x92x90’
b2=bytes(a,encoding=”gbk”)
print(b2) #b’xc0xeexe8xb4’

c.长度的限制
对于操作系统的不同对于int的长度也不同
32bit -2**31-----------2**31-1
64bit -2**63-----------2**63-1
但是对于Python来说如果我们使用的数超过了int的最大数那么他不会报错,而是会把转换为长整形。也就是会在数字的后面加上l
长整形的范围可以说是无限的大,只要你的内存越大他就越大可以把内存消耗完

将字节转换成字符串类型

new1=str(b1,encoding=”utf-8”)
print(new1) #李璐
new2 = str(b2,encoding=”gbk”)
print(new2)#李璐

c、嵌套的索引
a1 = ['rain','sir','sea',123,{'aaa':'bbb','ccc':{'ddd':'eee'}}]
a2 = a1[4]["ccc"]['ddd']

将10进制的数 ——》2进制 以下3中方法

c.公共功能
索引:只能取一个元素
切片:可以取多个元素

以utf-8 编码的,一个汉字是3个字节

a、特别的一些列表的功能
a1.clear()---------------------------------------------------------------------清除列表功能
a1.append()-------------------------------------------------------------------追加某个元素
a1.extend()--------------------------------------------------------------------以迭代的方式追加元素
a1.insert()--------------------------------------------------------------------添加元素,在指定的位置添加元素
a1.reverse()-------------------------------------------------------------------将列表反转

print s1.replace(‘l’,’b’)

3、列表:list
a1 = [Python内容拾遗。'cui','rain','sir']Python内容拾遗。----------------创建一个列表
a2 = list()-------------------------------创建一个空的列表
a2 = list(['cui','rain','sir'])
def __init__(self, seq=())---------------------------------------对于转换的对象要是可迭代(可以这么理解可迭代的就是可以for循环的)

s1=”alexl”
s2=str(“alex”)

 

len() id() bin()

a=10
print(bin(a)) #0b1010

a=”李璐”

4、元祖.tuple
a、创建和转换
a1 = ('cui','rain','sir')
a2 = tuple(a1)---------------------------------也是可以迭代的
a3 = tuple(('cui','rain','sir'))
b、基本特性
count------------------------------------------------统计有多少个元素
index------------------------------------------------查找查个元素并返位置
c、元素不可被修改
a1 = ('cui','rain','sir',['hell','keke'])
print(a1)
a1[3].append('while')
print(a1)
输出结果:
('cui', 'rain', 'sir', ['hell', 'keke'])
('cui', 'rain', 'sir', ['hell', 'keke', 'while'])
总结:对于元祖来说他的元素是不可以被修改,但是他元素内的内容是可以被修改,向上面的举例来说,如果我们想修改元素‘cui’是不可以

gbk —–>2个字节

print(bytes_lists)# 默认每一个字节都是以16进制表示的 b’xe6x9dx8exe7x92x90’

for b in bytes_lists: #for循环中每个字节都是10进制表示的
print(b)
230
157
142
231
146
144

n1.get()--------------------------------------------------------------------------------------------------------------------根据key值来获取Value,与用索引不同的是,如果没有这个key值那么get会给它返回一个空值,而索引不会则会报错,这里的d是默认的填充的值,当vlaue没有时我们可以用默认值来填充

t=tuple()

t=(11,22,[“alex”,{‘k1’:’wang’}])
tt=t[2][1]
tt.update({‘k5’:’name’})
tt[‘k7’]=890
print(tt)

重要:一般来说对于字符串在使用一个功能的时候一般不会改变原来的内容,而对于list,tuple,dict来说一般会在原来对象上进行修改

a2 = dict(enumerate(a1))
print(a2)

编码、for
举例:
temp = "你好"
for i in temp:
print (i)
bytes_list = bytes(i,encoding='utf-8')
print(bytes_list)
for i in bytes_list:
print (i)
print(bin(i))
输出结果:

b'xe4xbdxa0'
228
0b11100100
189
0b10111101
160
0b10100000

b'xe5xa5xbd'
229
0b11100101
165
0b10100101
189
0b10111101
总结:对于utf-8的编码来说汉字是以三个字节来存储的,并且会以十六进制进行来表现的,而对gbk码是2个字节来存储
对于2.7与3.7版本,在for循环输出汉字的时候,对于2.7的版本是以字节的形式输出的,而对于2.7的版本是以字符的形式输出
从上面的举例可以看出对于for循环的时候会自动把别的进制自动转换成十进制

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划