格式化輸出
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,如需轉載請自行聯系原作者