天天看点

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

格式化输出

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

1

2

3

4

<code>&gt;&gt;&gt; </code><code>'hello,%s'</code><code>%</code><code>'world'</code>

<code>'hello,world'</code>

<code>&gt;&gt;&gt; </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>&gt;&gt;&gt; </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>&gt;&gt;&gt; </code><code>'%.2f'</code><code>%</code><code>3.1415926</code>

<code>'3.14'</code>

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

<code>&gt;&gt;&gt; </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>&gt;&gt;&gt; </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>&gt;&gt;&gt; s1</code><code>=</code><code>72</code>

<code>&gt;&gt;&gt; s2</code><code>=</code><code>85</code>

<code>&gt;&gt;&gt; r</code><code>=</code><code>(s2</code><code>-</code><code>s1)</code><code>/</code><code>s1</code><code>*</code><code>100</code>

<code>&gt;&gt;&gt; </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>&gt;&gt;&gt; classmates </code><code>=</code> <code>[</code><code>'XiaoHong'</code><code>,</code><code>'LiSi'</code><code>,</code><code>'XiaoMing'</code><code>]</code>

<code>&gt;&gt;&gt; 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>&gt;&gt;&gt; </code><code>len</code><code>(classmates)</code>

<code>3</code>

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

6

7

8

9

<code>&gt;&gt;&gt; classmates[</code><code>0</code><code>]</code>

<code>'XiaoHong'</code>

<code>&gt;&gt;&gt; classmates[</code><code>1</code><code>]</code>

<code>'LiSi'</code>

<code>&gt;&gt;&gt; classmates[</code><code>2</code><code>]</code>

<code>'XiaoMing'</code>

<code>&gt;&gt;&gt; classmates[</code><code>3</code><code>]</code>

<code>Traceback (most recent call last):  </code><code>File</code> <code>"&lt;stdin&gt;"</code><code>, line </code><code>1</code><code>, </code><code>in</code> <code>&lt;module&gt;</code>

<code>IndexError: </code><code>list</code> <code>index out of </code><code>range</code>

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

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

<code>&gt;&gt;&gt; classmates[</code><code>-</code><code>1</code><code>]</code>

<code>&gt;&gt;&gt; classmates[</code><code>-</code><code>2</code><code>]</code>

<code>&gt;&gt;&gt; classmates[</code><code>-</code><code>3</code><code>]</code>

<code>&gt;&gt;&gt; classmates[</code><code>-</code><code>4</code><code>]</code>

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

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

<code>&gt;&gt;&gt; classmates.append(</code><code>'Xiaochun'</code><code>)</code>

<code>&gt;&gt;&gt; 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>&gt;&gt;&gt; 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>&gt;&gt;&gt; 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>&gt;&gt;&gt; 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>&gt;&gt;&gt; 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>&gt;&gt;&gt; L </code><code>=</code> <code>[</code><code>'nice'</code><code>,</code><code>True</code><code>,</code><code>123</code><code>]</code>

<code>&gt;&gt;&gt; L</code>

<code>[</code><code>'nice'</code><code>, </code><code>True</code><code>, </code><code>123</code><code>]</code>

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

<code>&gt;&gt;&gt; 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>&gt;&gt;&gt; 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>&gt;&gt;&gt; </code><code>len</code><code>(a)</code>

<code>4</code>

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

<code>&gt;&gt;&gt; s</code><code>=</code><code>[</code><code>'asp'</code><code>,</code><code>'php'</code><code>,</code><code>1111</code><code>]</code>

<code>&gt;&gt;&gt; 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>&gt;&gt;&gt; l</code><code>=</code><code>[]</code>

<code>&gt;&gt;&gt; </code><code>len</code><code>(l)</code>

<code>0</code>

tuple

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

<code>&gt;&gt;&gt; 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>&gt;&gt;&gt; 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>&gt;&gt;&gt; t</code><code>=</code><code>(</code><code>1</code><code>,</code><code>2</code><code>)</code>

<code>&gt;&gt;&gt; t</code>

<code>(</code><code>1</code><code>, </code><code>2</code><code>)</code>

如果要定义一个空的tuple,可以写成<code>()</code>:

<code>&gt;&gt;&gt; t</code><code>=</code><code>()</code>

<code>()</code>

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

<code>&gt;&gt;&gt; t</code><code>=</code><code>(</code><code>1</code><code>)</code>

<code>1</code>

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

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

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

<code>&gt;&gt;&gt; t</code><code>=</code><code>(</code><code>1</code><code>,)</code>

<code>(</code><code>1</code><code>,)</code>

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

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

<code>&gt;&gt;&gt; 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>&gt;&gt;&gt; t[</code><code>2</code><code>][</code><code>0</code><code>]</code><code>=</code><code>'X'</code>

<code>&gt;&gt;&gt; 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>&gt;&gt;&gt; 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>&gt;&gt;&gt; </code><code>print</code><code>(L[</code><code>0</code><code>][</code><code>0</code><code>])</code>

<code>Apple</code>

<code>&gt;&gt;&gt; </code><code>print</code><code>(L[</code><code>1</code><code>][</code><code>1</code><code>])</code>

<code>Python</code>

<code>&gt;&gt;&gt; </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,如需转载请自行联系原作者