据廖雪峰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,如需转载请自行联系原作者
相关文章
|
15天前
|
Python
python函数的参数学习
学习Python函数参数涉及五个方面:1) 位置参数按顺序传递,如`func(1, 2, 3)`;2) 关键字参数通过名称传值,如`func(a=1, b=2, c=3)`;3) 默认参数设定默认值,如`func(a, b, c=0)`;4) 可变参数用*和**接收任意数量的位置和关键字参数,如`func(1, 2, 3, a=4, b=5, c=6)`;5) 参数组合结合不同类型的参数,如`func(1, 2, 3, a=4, b=5, c=6)`。
16 1
|
11天前
|
Python
python学习3-选择结构、bool值、pass语句
python学习3-选择结构、bool值、pass语句
|
2天前
|
运维 Shell Python
Shell和Python学习教程总结
Shell和Python学习教程总结
|
2天前
|
Python
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
|
2天前
|
开发框架 前端开发 数据库
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
|
2天前
|
数据采集 数据可视化 数据处理
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
|
2天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
9天前
|
机器学习/深度学习 算法 Python
使用Python实现集成学习算法:Bagging与Boosting
使用Python实现集成学习算法:Bagging与Boosting
19 0
|
10天前
|
Python
python学习-函数模块,数据结构,字符串和列表(下)
python学习-函数模块,数据结构,字符串和列表
51 0
|
11天前
|
Python
python学习14-模块与包
python学习14-模块与包