Python学习笔记三:03数值类型以及数据类型

三、深复制和浅复制
1.字符串的拼接

例: a = 'hello'  ,    b = 'python'   ,   c = '!'     将a,b ,c 中的字符串连成一句话。
第一种方法:用+号

s='i love python'
s1='!!'
s+s1  #'i love python!!'

第二种方法:格式化字符串 %s

格式化字符串的%s部分称为转换说明符,标记了需要放置转换值的位置,通用术语为占位符。

s='i'
s1='love'
s2='python'
s3='%s '%s   #'i ' 单个可括号也可以不用
s3='%s %s %s '%(s,s1,s2)   #'i love python ' 一一对应的(占位符)输出来的还是字符串

第三种方法:''.join()方法
   S.join(iterable) -> str 只有一个参数,对象必须是可迭代(列表,元组,字符串)的,并且元素必须是字符串

''.join([s,s1,s2]) #'ilovepython'
' '.join([s,s1,s2]) #'i love python' 加了个空格
' '.join((s,s1,s2)) #用元组
' '.join('s,s1,s2') #失去了变量含义

第四种方法:'{}'.format(s)
 跟第二种方法类似都有占位符 'i'

#'{} {}'.format(s) #IndexError: tuple index out of range
'{} {}'.format(s,s1) #括号和参数对应 'i love',当{}里面是空的时候,里面默认索引为0,1按format括号里的顺序依次填入
'{0} {1} {2}'.format(s,s1,s2) #有索引的
'{1} {2} {0}'.format(s,s1,s2) #可以变顺序
'{1} {1} {1}'.format(s,s1,s2) #love love love
'{0} {0} {0}'.format([s,s1,s2]) #"['i', 'love', 'python'] ['i', 'love', 'python'] ['i', 'love', 'python']"
#因为第一个0 有一个列表元素,没有1索引
'{0[0]} {0[1]} {0[2]}'.format([s,s1,s2]) #'i love python'
#'{0} {0} {0}'.format(a=s,b=s1,c=s2) #指定了对象后,会失去位置,运行报错
#IndexError: tuple index out of range(前面也要指定)
#{}里面可以指定对象名称,后面通过赋值的方式给前面的相应的值,后面是无序的
'{a} {c} {b}'.format(a=s,b=s1,c=s2) #后面指定了之后,前面必须要用名字指定位置

format补充 也可以格式化输入

'{}'.format(12.22)
'{:.1f}'.format(12.22) #'12.2'  保留1位小数
'{:.2%}'.format(12.2222) #'1222.22%'  百分比
'{:<10}'.format(12) #'12        '  <左对齐,10代表输出占10位 '12 '
'{:>10}'.format(12) #'        12'  >右对齐,输出占10位
'{:^10}'.format(12) #'    12    '  居中
'{:*^10}'.format(12) #'****12****' 用*来填充
'{:a^10}'.format(12) #'aaaa12aaaa'

2.格式化输出

下面介绍基本转换说明符。注意,这些项的顺序至关重要:

(1)%字符:标记转换说明符开始

(2)转换标志(可选):-表示左对齐;+表示在转换值之前要加上正负号;0表示转换值位数不够时用0填充(大于0的话会被认成字段宽值);“ ”(空字符)表示正数之前保留空格

(3)最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度。如果是*,宽度就会从值元组中读出

(4)点(.)后跟精度值(可选):如果转换的是实数,精度值表示出现在小数点后的位数;如果转换的是字符串,该数字就表示最大字段宽度;如果是*,精度就会从元组中读出

(5)转换类型

%s 格式化字符串

'%s'%'lucky' #'lucky'
'%8s'%'lucky' #' lucky' 默认右对齐,前面用空格补齐 前面加数字表示宽度
'%-8s'%'lucky' #'lucky ' -号表示左对齐
'%s'%'%'  #%
'%*s'%(10,565)  #'       565'

%d 格式化整数

'%d'%1.11 #'1' 输出的还是字符串
print('%d'%1.111) #1 格式化整数

%f 格式化小数

若不指定精度,则默认输出6位小数

'%f'%1.111 #'1.111000' 默认保留6位小数
#m.n  m是显示的最小长度,当m大于格式化位数时才起作用显示m位,n是代表小数的位数。
'%2f'%1.111 #长度为2,又保留6位小数 相当于2.6 默认先看精度
'%.2f'%1.111 #保留2位小数
'%6.2f'%1.111 #' 1.11'
'%2.1f'%123.111111 #'123.1' 优先以精度为准
'%06.2f'%1.111 #'001.11' #用0填充

%c 格式化ASCII字符(把数字转换成字母)

'a'>'A' #True
'%c'%65 #'A'
'%c'%97 #'a'

%o 格式化八进制

'%o'%7 #'7'
'%o'%8 #'10'
'%o'%16 #'20

%x 格式化十六进制

'%x'%16 #'10'
'%x'%10 #'a'
'%x'%15 #'f'

%e 用科学计数法格式化

'%e'%100 #'1.000000e+02'

+号 显示后面数的正负

'%+6.2f'%1.111 #' +1.11'
'%+6.2f'%-1.111 #' -1.11'

2.1转义字符
换行 a 提示音(需要在cmd里)  退格 制表符

print('www
mmm')
print(r'www
mmm') #取消字符串的转义
print(r'www\nmmm') #取消转义
print('a')
print('abde')
print('abc	tt')

3.深浅复制 (有嵌套的列表)

元组和列表之间的相互嵌套(字符串里面都会变成字符串,失去列表和元组的方法),嵌套之后可以通过索引值来取数
复制都是分配俩个地址,只不过浅复制只能复制外面的,复制不了嵌套在里面的
同一个地址针对的是嵌套在里面序列类型
·浅复制:copy() 切片
·深复制:import copy copy.deepcopy()

li=['a','b']
lu=[1,li]
lu #[1,['a','b']
lu[1][1] #'b'
lq=lu.copy() #[1,['a','b'] 属于浅复制
id(lu) #57977352
id(lq) #58255120
id(lu[1]) #57977832
id(lq[1]) #57977832
import copy
ls=copy.deepcopy(lu) #[1, ['a', 'b']]
id(lu[1]) #57977832
id(ls[1]) #58069800
#说明内列表变了

li.append('c')
li #['a', 'b', 'c']
lq #[1,['a', 'b', 'c']] #浅复制还是同一个对象
ls #[1, ['a', 'b']] #深复制不是同一个对象了

lqq=lu[:] #[1, ['a', 'b', 'c']]
li.append('d') #[1, ['a', 'b', 'c', 'd']]
原文地址:https://www.cnblogs.com/pika-pika/p/8477965.html