据廖雪峰python3教程----python学习第三天

简介:

格式化输出


Python中的格式化输出与C语言是一致的都可以用 % 来实现 eg:

1
2
3
4
>>>  'hello,%s' % 'world'
'hello,world'
>>>  'Hi,%s,you have $%d.' % ( 'XiaoMing' , 1000 )
'Hi,XiaoMing,you have $1000.'



% 运算符是用来格式化字符串的。在字符串内部, %s 表示用字符替换,%d表示用整数替换,有几个 %? 占位符,后面就跟几个变量

或者值,顺序要对应好。如果这有一个 %? , 括号可以省略。

%d 整数
%f 浮点数
%s 字符串

%x

十六进制数


其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数

1
2
3
4
>>>  '%2d-%02d' % ( 3 , 1 )
'3-01'
  >>>  '%.2f' % 3.1415926
'3.14'


%s 可以将任何数据类型转化为字符串

1
2
>>>  'Age:%s.Grender:%s' % ( 25 , True )
'Age:25.Grender:True'


字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%

1
2
>>>  'growth rate: %d %%' % 7
'growth rate: 7 %'




练习


小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点,并用字符串格式化显示出'xx.x%',只保留小数点后1位:

1
2
3
4
5
>>> s1 = 72
>>> s2 = 85
>>> r = (s2 - s1) / s1 * 100
>>>  print ( '%.2f%%' % r)
18.06 %





使用list和tuple


list


Python内置的一种数据类型是列表:list。list是一种有序的集和,可以随时添加和删除其中的元素。

比如,列出同学的名字就可用 list 表示

1
2
3
>>> classmates  =  [ 'XiaoHong' , 'LiSi' , 'XiaoMing' ]
>>> classmates                            
[ 'XiaoHong' 'LiSi' 'XiaoMing' ]

 

变量 classmates 就是一个 list 变量 可以用 len() 获得 list 元素的个数

1
2
  >>>  len (classmates)
3

    

用索引来访问list中的每一个元素,索引从0开始

1
2
3
4
5
6
7
8
9
>>> classmates[ 0 ]
'XiaoHong'
>>> classmates[ 1 ]
'LiSi'
>>> classmates[ 2 ]
'XiaoMing'
>>> classmates[ 3 ]
Traceback (most recent call last):   File  "<stdin>" , line  1 in  <module>
IndexError:  list  index out of  range

当给出的索引超出范围时,python会给出错误报告,索引的最大值为 : len(classmates)-1


如果要去倒数第一个list元素 可以使用:

1
2
3
4
5
6
7
8
9
>>> classmates[ - 1 ]
'XiaoMing'
>>> classmates[ - 2 ]
'LiSi'
>>> classmates[ - 3 ]
'XiaoHong'
>>> classmates[ - 4 ]
Traceback (most recent call last):   File  "<stdin>" , line  1 in  <module>
IndexError:  list  index out of  range

超出范围时,python同样会给出一个错误报告.



list 是一个可变的有序表,所以,可以往list中追加元素到末尾:

1
2
3
>>> classmates.append( 'Xiaochun' )
>>> classmates
[ 'XiaoHong' 'LiSi' 'XiaoMing' 'Xiaochun' ]


也可以把元素插入指定的位置,比如索引号为 1 的位置:

1
2
3
4
5
6
>>> classmates.insert( 1 , 'XiaoQiang' )
>>> classmates
[ 'XiaoHong' 'XiaoQiang' 'LiSi' 'XiaoMing' 'Xiaochun' ]
>>> classmates.insert( 3 , 'XiaoLv' )
>>> classmates
[ 'XiaoHong' 'XiaoQiang' 'LiSi' 'XiaoLv' 'XiaoMing' 'Xiaochun' ]


要删除list末尾的元素,用pop(i)方法,其中i是索引位置:

1
2
3
4
>>> classmates.pop( 2 )
'LiSi'
>>> classmates
[ 'XiaoHong' 'XiaoQiang' 'XiaoLv' 'XiaoMing' 'Xiaochun' ]



要把某个元素换成别的元素,可以直接赋值给对应的索引位置:

1
2
3
4
5
6
>>> classmates  =  [ 'XiaoHong' , 'LiSi' , 'XiaoMing' ]
>>> classmates
[ 'XiaoHong' 'LiSi' 'XiaoMing' ]
>>> classmates[ 1 ] = 'WangWu'
>>> classmates
[ 'XiaoHong' 'WangWu' 'XiaoMing' ]


list 里面的元素类型也可以不相同:

1
2
3
>>> L  =  [ 'nice' , True , 123 ]
>>> L
[ 'nice' True 123 ]


list 的元素也可以是另外一个 list :

1
2
3
4
5
>>> a =  [ 'python' , 'java' ,[ 'asp' , 'php' , 1111 ], 'learn' ]
>>> a
[ 'python' 'java' , [ 'asp' 'php' 1111 ],  'learn' ]
>>>  len (a)
4


要注意a只有4个元素,其中a[2]又是一个list,如果拆开写就更容易理解了:

1
2
3
4
>>> s = [ 'asp' , 'php' , 1111 ]
>>> a =  [ 'python' , 'java' ,s, 'learn' ]
>>> a
[ 'python' 'java' , [ 'asp' 'php' 1111 ],  'learn' ]


要拿到'php'可以写p[1]或者s[2][1],因此s可以看成是一个二维数组,类似的还有三维、四维……数组,不过很少用到。


如果一个list中一个元素也没有,就是一个空的list,它的长度为0:

1
2
3
>>> l = []
>>>  len (l)
0




tuple



另一种有序列表叫元组:tuple. tuple 与 list 类似,但是 tuple 一旦初始化就不能修改,eg:

1
2
3
>>> classmates = ( 'xiaoming' , 'xiaoqiang' , 'xiaohong' )
>>> classmates
( 'xiaoming' 'xiaoqiang' 'xiaohong' )


现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0]classmates[-1],但不能赋值成另外的元素。

1
2
3
4
5
6
7
>>> classmates[ 1 ]
'xiaoqiang'
>>> classmates[ - 1 ]
'xiaohong'
>>> classmates[ 1 ] = 'xiaoxin'
Traceback (most recent call last):   File  "<stdin>" , line  1 in  <module>
TypeError:  'tuple'  object  does  not  support item assignment



不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:

1
2
3
>>> t = ( 1 , 2 )
>>> t
( 1 2 )


如果要定义一个空的tuple,可以写成()

1
2
3
>>> t = ()
>>> t
()


但是,如果只有一个元素的tuple,如果你这么定义:

1
2
3
>>> t = ( 1 )
>>> t
1

定义的不是 tuple ,是 1 这个数!  这是因为这个()即可表示tuple,又可以表示数学里的小括号,这就产生了歧义,因此,

python 规定,这种情况下小括号计算,计算结果就是1.


所以,只有1个元素的 tuple 定义时 必须加一个逗号,来消除歧义:

1
2
3
>>> t = ( 1 ,)
>>> t
( 1 ,)

python 在显示只有一个元素的tuple时,也会在后面加上一个 逗号 ,避免误解为 数学计算上的括号


最候来看一个“可变的‘tuple’”:

1
2
3
4
5
>>> t = ( 'a' , 'b' ,[ 'A' , 'B' ])
>>> t[ 2 ][ 0 ] = 'X'
>>> t[ 2 ][ 1 ] = 'Z'
>>> t
( 'a' 'b' , [ 'X' 'Z' ])


这个tuple定义的时候有3个元素,分别是 ‘a’,‘b’和一个 list。 不是说tuple一旦定义后就不可变了吗?怎么后来又变了?


别急,我们先看看定义的时候tuple包含的3个元素:

wKioL1btUHbgT2oWAAAaeqO2l88208.png

spacer.gif

当我们把list的元素'A''B'修改为'X''Y'后,tuple变为:

wKioL1btUIrS2OyxAAAao5cU28I540.png

spacer.gif

表面上看,tuple的元素变了,实际上是list的元素变了 ,tuple所谓的“不变”是说,tuple的每个元素,只想永远不变,

即指向‘a’,就不能变成指向‘b’,指向一个 list 就不能改变指向其他对象,但指向这个 list 本身是会变的。

理解了“指向不变”后,要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。


练习


请用索引取出下面list的指定元素:

L = [
    ['Apple', 'Google', 'Microsoft'],
    ['Java', 'Python', 'Ruby', 'PHP'],
    ['Adam', 'Bart', 'Lisa']

]

# 打印Apple:
print(?)
# 打印Python:
print(?)
# 打印Lisa:

print(?)


1
2
3
4
5
6
7
8
9
10
11
>>> L  =  [
...     [ 'Apple' 'Google' 'Microsoft' ],
...     [ 'Java' 'Python' 'Ruby' 'PHP' ]
,...     [ 'Adam' 'Bart' 'Lisa' ]
... ]
>>>  print (L[ 0 ][ 0 ])
Apple
>>>  print (L[ 1 ][ 1 ])
Python
>>>  print (L[ 2 ][ 2 ])
Lisa



本文转自 nw01f 51CTO博客,原文链接:http://blog.51cto.com/dearch/1752954,如需转载请自行联系原作者
相关文章
|
20小时前
|
搜索推荐 区块链 开发者
【python程序打包教程】PyInstaller一键打包Python程序为独立可执行exe文件
【python程序打包教程】PyInstaller一键打包Python程序为独立可执行exe文件
|
1天前
|
Python
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记2)
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记2)
|
1天前
|
Python
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记)
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记)
|
1天前
|
存储 设计模式 算法
Python基础教程(第3版)中文版 第19章 趣味编程 (笔记)
Python基础教程(第3版)中文版 第19章 趣味编程 (笔记)
|
1天前
|
Python Windows
Python基础教程(第3版)中文版 第18章 程序打包 (笔记)
Python基础教程(第3版)中文版 第18章 程序打包 (笔记)
|
1天前
|
Java C# C++
Python基础教程(第3版)中文版 第17章 扩展python (笔记)
Python基础教程(第3版)中文版 第17章 扩展python (笔记)
|
1天前
|
移动开发 测试技术 C语言
Python基础教程(第3版)中文版 第16章 测试基础(笔记)
Python基础教程(第3版)中文版 第16章 测试基础(笔记)
|
1天前
|
XML 数据格式 Python
Python基础教程(第3版)中文版 第15章 python和web(笔记)
Python基础教程(第3版)中文版 第15章 python和web(笔记)
|
1天前
|
Unix Python
Python基础教程(第3版)中文版 第14章 网络编程(笔记)
Python基础教程(第3版)中文版 第14章 网络编程(笔记)
|
1天前
|
SQL 安全 API
Python基础教程(第3版)中文版 第13章 数据库支持(笔记)
Python基础教程(第3版)中文版 第13章 数据库支持(笔记)