格式化输出
Python中的格式化输出与C语言是一致的都可以用 % 来实现 eg:
1
2
3
4
<code>>>> </code><code>'hello,%s'</code><code>%</code><code>'world'</code>
<code>'hello,world'</code>
<code>>>> </code><code>'Hi,%s,you have $%d.'</code><code>%</code><code>(</code><code>'XiaoMing'</code><code>,</code><code>1000</code><code>)</code>
<code>'Hi,XiaoMing,you have $1000.'</code>
% 运算符是用来格式化字符串的。在字符串内部, %s 表示用字符替换,%d表示用整数替换,有几个 %? 占位符,后面就跟几个变量
或者值,顺序要对应好。如果这有一个 %? , 括号可以省略。
%d
整数
%f
浮点数
%s
字符串
%x
十六进制数
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数
<code>>>> </code><code>'%2d-%02d'</code><code>%</code><code>(</code><code>3</code><code>,</code><code>1</code><code>)</code>
<code>'3-01'</code>
<code> </code><code>>>> </code><code>'%.2f'</code><code>%</code><code>3.1415926</code>
<code>'3.14'</code>
%s 可以将任何数据类型转化为字符串
<code>>>> </code><code>'Age:%s.Grender:%s'</code><code>%</code><code>(</code><code>25</code><code>,</code><code>True</code><code>)</code>
<code>'Age:25.Grender:True'</code>
字符串里面的<code>%</code>是一个普通字符怎么办?这个时候就需要转义,用<code>%%</code>来表示一个<code>%</code>:
<code>>>> </code><code>'growth rate: %d %%'</code><code>%</code><code>7</code>
<code>'growth rate: 7 %'</code>
练习
小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点,并用字符串格式化显示出<code>'xx.x%'</code>,只保留小数点后1位:
5
<code>>>> s1</code><code>=</code><code>72</code>
<code>>>> s2</code><code>=</code><code>85</code>
<code>>>> r</code><code>=</code><code>(s2</code><code>-</code><code>s1)</code><code>/</code><code>s1</code><code>*</code><code>100</code>
<code>>>> </code><code>print</code><code>(</code><code>'%.2f%%'</code><code>%</code><code>r)</code>
<code>18.06</code><code>%</code>
使用list和tuple
list
Python内置的一种数据类型是列表:list。list是一种有序的集和,可以随时添加和删除其中的元素。
比如,列出同学的名字就可用 list 表示
<code>>>> classmates </code><code>=</code> <code>[</code><code>'XiaoHong'</code><code>,</code><code>'LiSi'</code><code>,</code><code>'XiaoMing'</code><code>]</code>
<code>>>> classmates </code>
<code>[</code><code>'XiaoHong'</code><code>, </code><code>'LiSi'</code><code>, </code><code>'XiaoMing'</code><code>]</code>
变量 classmates 就是一个 list 变量 可以用 len() 获得 list 元素的个数
<code> </code><code>>>> </code><code>len</code><code>(classmates)</code>
<code>3</code>
用索引来访问list中的每一个元素,索引从0开始
6
7
8
9
<code>>>> classmates[</code><code>0</code><code>]</code>
<code>'XiaoHong'</code>
<code>>>> classmates[</code><code>1</code><code>]</code>
<code>'LiSi'</code>
<code>>>> classmates[</code><code>2</code><code>]</code>
<code>'XiaoMing'</code>
<code>>>> classmates[</code><code>3</code><code>]</code>
<code>Traceback (most recent call last): </code><code>File</code> <code>"<stdin>"</code><code>, line </code><code>1</code><code>, </code><code>in</code> <code><module></code>
<code>IndexError: </code><code>list</code> <code>index out of </code><code>range</code>
当给出的索引超出范围时,python会给出错误报告,索引的最大值为 : len(classmates)-1
如果要去倒数第一个list元素 可以使用:
<code>>>> classmates[</code><code>-</code><code>1</code><code>]</code>
<code>>>> classmates[</code><code>-</code><code>2</code><code>]</code>
<code>>>> classmates[</code><code>-</code><code>3</code><code>]</code>
<code>>>> classmates[</code><code>-</code><code>4</code><code>]</code>
超出范围时,python同样会给出一个错误报告.
list 是一个可变的有序表,所以,可以往list中追加元素到末尾:
<code>>>> classmates.append(</code><code>'Xiaochun'</code><code>)</code>
<code>>>> classmates</code>
<code>[</code><code>'XiaoHong'</code><code>, </code><code>'LiSi'</code><code>, </code><code>'XiaoMing'</code><code>, </code><code>'Xiaochun'</code><code>]</code>
也可以把元素插入指定的位置,比如索引号为 1 的位置:
<code>>>> classmates.insert(</code><code>1</code><code>,</code><code>'XiaoQiang'</code><code>)</code>
<code>[</code><code>'XiaoHong'</code><code>, </code><code>'XiaoQiang'</code><code>, </code><code>'LiSi'</code><code>, </code><code>'XiaoMing'</code><code>, </code><code>'Xiaochun'</code><code>]</code>
<code>>>> classmates.insert(</code><code>3</code><code>,</code><code>'XiaoLv'</code><code>)</code>
<code>[</code><code>'XiaoHong'</code><code>, </code><code>'XiaoQiang'</code><code>, </code><code>'LiSi'</code><code>, </code><code>'XiaoLv'</code><code>, </code><code>'XiaoMing'</code><code>, </code><code>'Xiaochun'</code><code>]</code>
要删除list末尾的元素,用pop(i)方法,其中i是索引位置:
<code>>>> classmates.pop(</code><code>2</code><code>)</code>
<code>[</code><code>'XiaoHong'</code><code>, </code><code>'XiaoQiang'</code><code>, </code><code>'XiaoLv'</code><code>, </code><code>'XiaoMing'</code><code>, </code><code>'Xiaochun'</code><code>]</code>
要把某个元素换成别的元素,可以直接赋值给对应的索引位置:
<code>>>> classmates[</code><code>1</code><code>]</code><code>=</code><code>'WangWu'</code>
<code>[</code><code>'XiaoHong'</code><code>, </code><code>'WangWu'</code><code>, </code><code>'XiaoMing'</code><code>]</code>
list 里面的元素类型也可以不相同:
<code>>>> L </code><code>=</code> <code>[</code><code>'nice'</code><code>,</code><code>True</code><code>,</code><code>123</code><code>]</code>
<code>>>> L</code>
<code>[</code><code>'nice'</code><code>, </code><code>True</code><code>, </code><code>123</code><code>]</code>
list 的元素也可以是另外一个 list :
<code>>>> a</code><code>=</code> <code>[</code><code>'python'</code><code>,</code><code>'java'</code><code>,[</code><code>'asp'</code><code>,</code><code>'php'</code><code>,</code><code>1111</code><code>],</code><code>'learn'</code><code>]</code>
<code>>>> a</code>
<code>[</code><code>'python'</code><code>, </code><code>'java'</code><code>, [</code><code>'asp'</code><code>, </code><code>'php'</code><code>, </code><code>1111</code><code>], </code><code>'learn'</code><code>]</code>
<code>>>> </code><code>len</code><code>(a)</code>
<code>4</code>
要注意a只有4个元素,其中a<code>[2]</code>又是一个list,如果拆开写就更容易理解了:
<code>>>> s</code><code>=</code><code>[</code><code>'asp'</code><code>,</code><code>'php'</code><code>,</code><code>1111</code><code>]</code>
<code>>>> a</code><code>=</code> <code>[</code><code>'python'</code><code>,</code><code>'java'</code><code>,s,</code><code>'learn'</code><code>]</code>
要拿到<code>'php'</code>可以写<code>p[1]</code>或者<code>s[2][1]</code>,因此<code>s</code>可以看成是一个二维数组,类似的还有三维、四维……数组,不过很少用到。
如果一个list中一个元素也没有,就是一个空的list,它的长度为0:
<code>>>> l</code><code>=</code><code>[]</code>
<code>>>> </code><code>len</code><code>(l)</code>
<code>0</code>
tuple
另一种有序列表叫元组:tuple. tuple 与 list 类似,但是 tuple 一旦初始化就不能修改,eg:
<code>>>> classmates</code><code>=</code><code>(</code><code>'xiaoming'</code><code>,</code><code>'xiaoqiang'</code><code>,</code><code>'xiaohong'</code><code>)</code>
<code>(</code><code>'xiaoming'</code><code>, </code><code>'xiaoqiang'</code><code>, </code><code>'xiaohong'</code><code>)</code>
现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用<code>classmates[0]</code>,<code>classmates[-1]</code>,但不能赋值成另外的元素。
<code>'xiaoqiang'</code>
<code>'xiaohong'</code>
<code>>>> classmates[</code><code>1</code><code>]</code><code>=</code><code>'xiaoxin'</code>
<code>TypeError: </code><code>'tuple'</code> <code>object</code> <code>does </code><code>not</code> <code>support item assignment</code>
不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:
<code>>>> t</code><code>=</code><code>(</code><code>1</code><code>,</code><code>2</code><code>)</code>
<code>>>> t</code>
<code>(</code><code>1</code><code>, </code><code>2</code><code>)</code>
如果要定义一个空的tuple,可以写成<code>()</code>:
<code>>>> t</code><code>=</code><code>()</code>
<code>()</code>
但是,如果只有一个元素的tuple,如果你这么定义:
<code>>>> t</code><code>=</code><code>(</code><code>1</code><code>)</code>
<code>1</code>
定义的不是 tuple ,是 1 这个数! 这是因为这个()即可表示tuple,又可以表示数学里的小括号,这就产生了歧义,因此,
python 规定,这种情况下小括号计算,计算结果就是1.
所以,只有1个元素的 tuple 定义时 必须加一个逗号,来消除歧义:
<code>>>> t</code><code>=</code><code>(</code><code>1</code><code>,)</code>
<code>(</code><code>1</code><code>,)</code>
python 在显示只有一个元素的tuple时,也会在后面加上一个 逗号 ,避免误解为 数学计算上的括号
最候来看一个“可变的‘tuple’”:
<code>>>> t</code><code>=</code><code>(</code><code>'a'</code><code>,</code><code>'b'</code><code>,[</code><code>'A'</code><code>,</code><code>'B'</code><code>])</code>
<code>>>> t[</code><code>2</code><code>][</code><code>0</code><code>]</code><code>=</code><code>'X'</code>
<code>>>> t[</code><code>2</code><code>][</code><code>1</code><code>]</code><code>=</code><code>'Z'</code>
<code>(</code><code>'a'</code><code>, </code><code>'b'</code><code>, [</code><code>'X'</code><code>, </code><code>'Z'</code><code>])</code>
这个tuple定义的时候有3个元素,分别是 ‘a’,‘b’和一个 list。 不是说tuple一旦定义后就不可变了吗?怎么后来又变了?
别急,我们先看看定义的时候tuple包含的3个元素:
<a href="http://s4.51cto.com/wyfs02/M00/7D/AE/wKioL1btUHbgT2oWAAAaeqO2l88208.png" target="_blank"></a>
当我们把list的元素<code>'A'</code>和<code>'B'</code>修改为<code>'X'</code>和<code>'Y'</code>后,tuple变为:
<a href="http://s4.51cto.com/wyfs02/M02/7D/AE/wKioL1btUIrS2OyxAAAao5cU28I540.png" target="_blank"></a>
表面上看,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:
# 打印Lisa:
10
11
<code>>>> L </code><code>=</code> <code>[</code>
<code>... [</code><code>'Apple'</code><code>, </code><code>'Google'</code><code>, </code><code>'Microsoft'</code><code>],</code>
<code>... [</code><code>'Java'</code><code>, </code><code>'Python'</code><code>, </code><code>'Ruby'</code><code>, </code><code>'PHP'</code><code>]</code>
<code>,... [</code><code>'Adam'</code><code>, </code><code>'Bart'</code><code>, </code><code>'Lisa'</code><code>]</code>
<code>... ]</code>
<code>>>> </code><code>print</code><code>(L[</code><code>0</code><code>][</code><code>0</code><code>])</code>
<code>Apple</code>
<code>>>> </code><code>print</code><code>(L[</code><code>1</code><code>][</code><code>1</code><code>])</code>
<code>Python</code>
<code>>>> </code><code>print</code><code>(L[</code><code>2</code><code>][</code><code>2</code><code>])</code>
<code>Lisa</code>
本文转自 nw01f 51CTO博客,原文链接:http://blog.51cto.com/dearch/1752954,如需转载请自行联系原作者