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}
>>> 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 Trueset的內部結構和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基礎2(dict—set—函式—切片—迭代—列表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
重修課程day2(python基礎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