1. 程式人生 > >python基礎2(dict—set—函式—切片—迭代—列表range)

python基礎2(dict—set—函式—切片—迭代—列表range)

1、dict定義字典,dict的key不可重複

d = {
    'Adam': 95,
    'Lisa': 85,
    'Bart': 59
}
>>> print d['Adam']
95
if 'Paul' in d:
    print d['Paul']

使用dict本身提供的一個 get 方法,在Key不存在的時候,返回None:
>>> print d.get('Bart')
59
>>> print d.get('Paul')
None

dict的查詢速度快不是沒有代價的,dict的缺點是佔用記憶體大,還會浪費很多內容,list正好相反,佔用記憶體小,但是查詢速度慢
>>> print d
{'Lisa': 85, 'Adam': 95, 'Bart': 59}
新增Paul的成績
>>> d['Paul'] = 72

遍歷dict

d = {
    'Adam': 95,
    'Lisa': 85,
    'Bart': 59
}
for key in d:
    print key+':',d[key]
2、set

set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重複,而且是無序的,這點和 dict 的 key很像。

>>> s = set(['A', 'B', 'C'])
>>> print s
set(['A', 'C', 'B'])
>>> s = set(['A', 'B', 'C', 'C'])
>>> print s
set(['A', 'C', 'B'])
>>> 'Bart' in s
True
set的內部結構和dict很像,唯一區別是不儲存value
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])
for x in s:
    print x[0]+':',x[1]
結果:
Lisa: 85
Adam: 95
Bart: 59
更新set,增加用add,刪除用remove
>>> s = set([1, 2, 3])
>>> s.add(4)
>>> print s
set([1, 2, 3, 4])
>>> s = set([1, 2, 3, 4])
>>> s.remove(4)
>>> print s
set([1, 2, 3])

針對下面的set,給定一個list,對list中的每一個元素,如果在set中,就將其刪除,如果不在set中,就新增進去。
s = set(['Adam', 'Lisa', 'Paul'])
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for i in L:
    if i in s:
        s.remove(i)
    else:
        s.add(i)        
print s
set(['Bart'])

3、函式

官方文件

http://docs.python.org/2/library/functions.html#abs

abs絕對值

>>> abs(-20)
20

比較函式 cmp(x, y) 就需要兩個引數,如果 x<y,返回 -1,如果 x==y,返回 0,如果 x>y,返回 1:
>>> cmp(1, 2)
-1
>>> cmp(2, 1)
1
>>> cmp(3, 3)
0

L = []
x = 1
while x <= 100:
    L.append(x * x)
    x = x + 1
print sum(L)

def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

公式相關時,匯入包math

import math

import math
def move(x, y, step, angle):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny
>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print x, y
151.961524227 70.0
設定預設值的函式
def greet(name='world'):
    print 'Hello, ' + name + '.'
greet()
greet('Bart')

想讓一個函式能接受任意個引數,我們就可以定義一個可變引數:
def fn(*args):
    print args
>>> fn()
()
>>> fn('a')
('a',)
>>> fn('a', 'b')
('a', 'b')
>>> fn('a', 'b', 'c')
('a', 'b', 'c')

4、切片取元素

可新建用append

>>> r = []
>>> n = 3
>>> for i in range(n):
...     r.append(L[i])
... 
>>> r
['Adam', 'Lisa', 'Bart']

直接取
>>> L[0:3]
['Adam', 'Lisa', 'Bart']
也可以從索引1開始,取出2個元素出來:
>>> L[1:3]
['Adam', 'Lisa']
只用一個 : ,表示從頭到尾:
>>> L[:]
['Adam', 'Lisa', 'Bart', 'Paul']
第三個引數表示每N個取一個,上面的 L[::2] 會每兩個元素取出一個來,也就是隔一個取一個。
>>> L[::2]
['Adam', 'Bart']
1. 前10個數;
2. 3的倍數;
3. 不大於50的5的倍數。
print L[:10]
print L[2::3]
print L[4:50:5]   //從5開始,到50,間隔5
倒序取,從-1開始,是倒數第一個數
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']

>>> L[-2:]
['Bart', 'Paul']

>>> L[:-2]
['Adam', 'Lisa']

>>> L[-3:-1]
['Lisa', 'Bart']

>>> L[-4:-1:2]
['Adam', 'Bart']
對字串切片
>>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[-3:]
'EFG'
>>> 'ABCDEFG'[::2]
'ACEG'
5、迭代

索引迭代,使用 enumerate() 函式:

>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> for index, name in enumerate(L):
...     print index, '-', name
... 
0 - Adam
1 - Lisa
2 - Bart
3 - Paul
zip()函式可以把兩個 list 變成一個 list:
>>> zip([10, 20, 30], ['A', 'B', 'C'])
[(10, 'A'), (20, 'B'), (30, 'C')]

用 itervalues() 方法替代 values() 方法,迭代效果完全一樣
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
print d.itervalues()
# <dictionary-valueiterator object at 0x106adbb50>
for v in d.itervalues():
    print v
# 85
# 95
# 59

 itervalues() 方法比 values() 方法節省了生成 list 所需的記憶體。

 dict 物件的 items() 方法返回的值:

>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> print d.items()
[('Lisa', 85), ('Adam', 95), ('Bart', 59)]
>>> for key, value in d.items():
...     print key, ':', value
... 
Lisa : 85
Adam : 95
Bart : 59
6、生成列表range

要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我們可以用range(1, 11)

>>> L = []
>>> for x in range(1, 11):
...    L.append(x * x)
... 
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
利用列表生成式生成列表 [1x2, 3x4, 5x6, 7x8, ..., 99x100]
print [x*(x+1) for x in range(1,100,2)]
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
帶表格的表示式
tds = ['<tr><td>%s</td><td>%s</td></tr>' % (name, score) for name, score in d.iteritems()]
print '<table>'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'

結果為
<table border="1">
<tr><th>Name</th><th>Score</th><tr>
<tr><td>Lisa</td><td>85</td></tr>
<tr><td>Adam</td><td>95</td></tr>
<tr><td>Bart</td><td>59</td></tr>
</table>

對於字串 'ABC' 和 '123',可以使用兩層迴圈,生成全排列:
>>> [m + n for m in 'ABC' for n in '123']
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

L = []
for m in 'ABC':
    for n in '123':
        L.append(m + n)
利用 3 層for迴圈的列表生成式,找出對稱的 3 位數。例如,121 就是對稱數,因為從右到左倒過來還是 121。
print [100 * n1 + 10 * n2 + n3 for n1 in range(1, 10) for n2 in range(10) for n3 in range(10) if n1==n3]

-----------------------------------------------------------

課程來源:慕課網







相關推薦

python基礎2dictset函式切片列表range

1、dict定義字典,dict的key不可重複 d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }>>> print d['Adam'] 95if 'Paul' in d: print d

Python基礎day-4[dict,set,bool]

pro 錯誤 name 特性 字典 無法 密碼 精確 新增 布爾類型:   True和False   所有的數據類型自帶布爾值,只有0,None,空的布爾值為False 字典dict:   特性:dict中使用key和對應的value來存儲數據,dict不像 list那樣,

Python基礎知識內建函式彙總

python內建函式 最近一直在看python的document,打算在基礎方面重點看一下python的keyword、Build-in Function、Build-in Constants、Build-in Types、Build-in Exception這四個方面,其實在看的時候發現整個《

Python高階特性切片 列表生成式 生成器 學習筆記

在Python中,程式碼不是越多越好,而是越少越好。程式碼不是越複雜越好,而是越簡單越好。 基於這一思想,Python中有非常有用的高階特性,1行程式碼能實現的功能,決不寫5行程式碼。請始終牢記,程式碼越少,開發效率越高。 切片 (Slice) 切

python高階特性:切片//列表生成式/生成器

廖雪峰老師的教程上學來的,地址:python高階特性  下面以幾個具體示例演示用法: 一、切片 1.1 利用切片實現trim def trim(s): while s[:1] == " " or s[-1:] == " ": # 若第1個元素或最後1個元素為空格 if

Python基礎資料結構之資料轉換Dict,Set,Tuple,List

本章是Python基礎資料結構的第六篇,由於之前沒有接觸過太多的Python版本的資料結構,所以在學習的過程中集百家之長和自己的見解,加以實踐,學習Python。 Python中用到tuple的方法,和注意事項都以程式碼的形式體現 #!/usr

重修課程day2python基礎2

類型 a* 代碼 false utf-8 意思 bytes 使用 byte 一 字符串格式化   占位符 %s和%d %s是屬於字符串的占位符,而%d是屬於數字類型的占位符 #占位符 %s %d # a="我叫%s,年齡%d,就是一個%s"%("alex",84,"sb

python 基礎 2.1 if 流程控制

字符串 ace 冒號 rip inpu root 類型 真的 use 一.if else 1.if 語句 if expression: //註意if後有冒號,必須有 statement(s) //相對於if縮進4個空格 註:python

Python入門 - 2真0基礎

上鎖 ... 新功能 針對 解決方案 target 知識點 但是 param 一 前言 上一章說了那麽多,不知道大家是否有躍躍欲試的沖動。說實話,編程就像英語一樣,只是一門語言,如果不用出來,能力會衰退。就像荒島沒人對話,時間長了很可能就不會說話了。如果不能自己寫出來,永

Python基礎教程第3版高清中文版PDF+英文原版PDF+2版源

jpg alt 經典 images python -o ESS pro 第2版 Python基礎教程(第3版)高清中文版PDF+英文原版PDF+2版源代碼以及Python基礎教程(第2版)中文版和英文原版,共4本書!Python入門學習的必備經典!資源鏈接:https://

Python基礎2:瞭解字元編碼

2-str-code.py # 瞭解字元編碼 # 字串也是一種資料型別,但是,字串比較特殊的是還有一個編碼問題。 # 因為計算機只能處理數字,如果要處理文字,就必須先把文字轉換為數字才能處理。 # 最早的計算機在設計時採用8個位元(bit)作為一個位元組(byte),所以,一個位元

11月23日python筆記python基礎2.6-3.0

2.6 使用for迴圈遍歷檔案開啟檔案: 需要藉助內建函式open()open(...)open(name[, mode[, buffering]]) -> file object name:檔名 mode 開啟方式(讀寫、二進位制等) Open a file using the file() typ

Python自動化學習筆記——Python資料型別集合set,元組tuple、修改檔案、函式、random常用方法

1.修改檔案的兩種方式 1 #第一種 2 with open('users','a+') as fw: #用a+模式開啟檔案,使用with這種語法可以防止忘記close檔案 3 fw.seek(0) #移動檔案指標到最前面,然後才能讀到內容 4 result=fw.read()

python基礎--生成器,內建高階函式

生成器示例 def create_num(all_num): print('-----1-------') a, b = 0, 1 current_num = 0 while current_num < all_nu

python基礎學習函式基礎

函式的基本使用 函式的定義 def 函式名(): 函式封裝的程式碼 …… def 是英文 define 的縮寫 函式名稱 應該能夠表達 函式封裝程式碼 的功能,方便後續的呼叫 函式名稱 的命名應該 符合 識別符號的命名規則 可以由 字母、下劃線 和

python基礎2

---恢復內容開始--- 9,格式化輸出。 現有一練習需求,問使用者的姓名、年齡、工作、愛好 ,然後列印成以下格式 ------------ info of Alex Li ----------- Name : Alex Li Age : 22 job : Teache

python基礎資料型別:set() 集合___006

1、集合:可變資料型別,它裡面的元素必須是不可變資料型別,無序,不重複。 2、集合例子:表現形式兩種 set1 = set({1,2,3}) set2 = {1,2,3} print(set1,type(set1)) # {1, 2, 3} <class 'set'> prin

python基礎之字串內建函式部分

# -*- coding: utf-8 -*- """ @file:strstudy.py @time:2018/4/2 21:45 @author:xq @contact:[email protected] """ #把字串的第一個字元大寫 # a = 'test' # print(a.capit

Python基礎學習:內建函式5

41.max(iterable, *[, key, default])   max(arg1, arg2, *args[, key])該函式返回iterable引數(必須是可迭代的)內最大的元素,或者給出所有引數中最大的元素。       key引數與default是可選的關

Python基礎學習:內建函式1

       Python中一共有上述68個內建函式,這些函式使用時不需要從外部匯入任何模組即可直接使用。儘管叫內建功能更加準確,但是鑑於其中大部分都是函式,或者是類(類的功能也是由函式實現),所以姑且強名之。1.abs(x)       返回x的絕對值,x應當為整型(int