Python常用函數筆記

來源:互聯網
上載者:User

標籤:

1.lambda lambda其實就是一條語句,lambda(x):body。x是lambda函數的參數,參數可以有任意多個(包括選擇性參數);body是函數體,只能是一個運算式,並且直接返回該運算式的值。
>>>f=lambda x:x+1
>>>f(2)
3
>>>(lambda x,y:x+y)(2,3)


2.filter filter(func, list)接受兩個參數:一個函數func和一個列表list,返回一個列表。函數func只能有一個參數。filter的功能:列表中所有元素作為參數傳遞給函數,返回可以另func返回真的元素的列表
>>>l=[‘abc‘,‘acd‘,‘1245‘,‘ddad‘,‘aaa‘]
>>> def func(s):
    return s.startswith(‘a‘)
>>>filter(func, l)
[‘abc‘,‘acd‘,‘aaa‘] 

>>> li = [1,2,3,4]

>>> filter(lambda x: x>2, li)

[3, 4]

 

2.1 迴圈過程中根據條件返回

>>> {x for x in ‘abracadabra‘ if x not in ‘abc‘}

set([‘r‘, ‘d‘])

 

3.zip  zip函數接受任意多個序列作為參數,將所有序列按相同的索引組合成一個元素是各個序列合并成的tuple的新序列,新的序列的長度以參數中最短的序列為準。另外(*)操作符與zip函數配合可以實現與zip相反的功能,即將合并的序列拆成多個tuple
>>>x=[1,2,3]
>>>y=[‘a‘,‘b‘,‘c‘]
>>>zip(x,y)
[(1,‘a‘),(2,‘b‘),(3,‘c‘)]
>>>zip(*zip(x,y))
[(1,2,3),(‘a‘,‘b‘,‘c‘)] 

 

4.map為操作list,返回list,綁定的函數為修改list中每一個值的函數
>>> list=[1,2,3]
>>> map(lambda x : x*2,list)
>>> [2, 4, 6] 

5.reduce為逐次操作list裡的每項,接收的參數為 2個,最後返回的為一個結果
>>> def func(x,y):  
>>>     return x+y
>>> reduce(func,(1,2,3)) 
>>> 6 

6.sorted字典排序

>>> import operator
>>> x = {1:2, 3:4, 4:3, 2:1, 0:0}
>>> sorted(x.iteritems(), key=operator.itemgetter(1), reverse=True)
[(3, 4), (4, 3), (1, 2), (2, 1), (0, 0)]

>>> sorted(x.iteritems(), key=lambda x : x[1], reverse=False)
[(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)]

 

7.列表字典排序

>>> li = [{‘name‘:‘wang‘, ‘age‘:30}, {‘name‘:‘zhang‘, ‘age‘:20}, {‘name‘:‘li‘, ‘age‘:25}]
>>> sorted(li, key=lambda x : x[‘name‘], reverse=False)
[{‘age‘: 25, ‘name‘: ‘li‘}, {‘age‘: 30, ‘name‘: ‘wang‘}, {‘age‘: 20, ‘name‘: ‘zhang‘}]

>>> sorted(li, key=operator.itemgetter(‘name‘), reverse=True)
[{‘age‘: 20, ‘name‘: ‘zhang‘}, {‘age‘: 30, ‘name‘: ‘wang‘}, {‘age‘: 25, ‘name‘: ‘li‘}]

 

8.翻轉字串

>>> s = "abcd"

>>> s[::-1]

‘dcba‘

>>> "".join(sorted(list(s),reverse=True))

‘dcba‘

 

9.元祖(tuple)、字典(dict)之間轉換

>>> t = ((1,"a"),(2,"b"))

>>> dict(t) #元祖轉字典

{1: ‘a‘, 2: ‘b‘}

>>> d = dict(t) 

>>> d.items() #字典轉元祖

[(1, ‘a‘), (2, ‘b‘)]

 

>>> t = (1,"a")

>>> dict([t]) #單個元祖轉字典

{1: ‘a‘}

>>> d = dict([t])

>>> d.popitem()

(1, ‘a‘)

>>> d.items()[0] #單個字典轉元祖

(1, ‘a‘)

 

增加索引值名稱

>>> li = [{1:"a"},{2:"b"}]

>>> [dict(zip(("key","value"), obj.items()[0])) for obj in li]

[{‘value‘: ‘a‘, ‘key‘: 1}, {‘value‘: ‘b‘, ‘key‘: 2}]

>>> map(lambda x: dict(zip(("key","value"), x.items()[0])),li)

[{‘value‘: ‘a‘, ‘key‘: 1}, {‘value‘: ‘b‘, ‘key‘: 2}]

>>> li2 = [{‘value‘: ‘a‘, ‘key‘: 1}, {‘value‘: ‘b‘, ‘key‘: 2}]

>>> [{obj["key"]:obj["value"]} for obj in li2]

[{1: ‘a‘}, {2: ‘b‘}]

 

列表內對象值分組

>>> li = [{"k":"1", "v":"v1"},{"k":"2", "v":"v2"},{"k":"1", "v":"v3"}]

>>> keys = set(map(lambda x:x["k"], li))  # 取出key值

>>> newlist = [{"k":x, "v":[y["v"] for y in li if y["k"]==x]} for x in keys]

>>> print newlist

[{‘k‘: ‘1‘, ‘v‘: [‘v1‘, ‘v3‘]}, {‘k‘: ‘2‘, ‘v‘: [‘v2‘]}]

 

10. 列印一個對象的所有屬性和值

for property, value in vars(theObject).iteritems():

    print property, ": ", value

這個做法其實就是 theObject.__dict__ , 也就是 vars(obj) 其實就是返回了 o.__dict__

 

11.列表分頁

>>> mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> print [mylist[i:i+4] for i in range(0, len(mylist), 4)]

[[1, 2, 3, 4], [5, 6, 7, 8], [9]]

 

12.列表步長

文法:L[start:stop:step]

 

mylist = [1,2,3,4,5,6,7,8,9,10]

for i in mylist[::2]:

    print i,

# prints 1 3 5 7 9

 

for i in mylist[1::2]:

    print i,

# prints 2 4 6 8 10

 

>>> range(1, 10, 2)

[1, 3, 5, 7, 9]

 

12. python字串格式化,2.7之後增加新的字串格式化方法format, 之前都是用%符號

>>> ‘{},{}‘.format(‘aa‘,‘bb‘)

‘aa,bb‘

>>> "{0},{2},{1}".format(1,2,3)

‘1,3,2‘

>>> "{0},{2},{1},{str}".format(1,2,3,str="string")

‘1,3,2,string‘

>>> ‘{0[0]},{0[1]}‘.format([‘aa‘,"bb"])

‘aa,bb‘

>>> ‘{:>10}‘.format(‘12‘)  # 字串左邊空格填充

‘        12‘

>>> ‘{:a<10}‘.format(‘12‘)  # 字串右邊字母"a"填充

‘12aaaaaaaa‘

>>> ‘{:.2f}‘.format(321.33345)  # 浮點類型

‘321.33‘

>>> ‘{:b}‘.format(17)  # 格式化為二進位

‘10001‘

>>> ‘{:x}‘.format(17)  # 十六進位

‘11‘

 

>>> "&nbsp;" * 4  # 複製多個字串

‘&nbsp;&nbsp;&nbsp;&nbsp;‘

 

 

13. 隨機數

隨機選取字串:

>>> import random

>>> random.choice ( [‘apple‘, ‘pear‘, ‘peach‘, ‘orange‘, ‘lemon‘] )

‘lemon‘

 

洗牌:

>>> items = [1, 2, 3, 4, 5, 6]

>>> random.shuffle(items)

>>> items

[3, 2, 5, 6, 4, 1]

 

多個字元中選取特定數量的字元:

>>> random.sample(‘abcdefghij‘,3) 

[‘a‘, ‘d‘, ‘b‘]

 

隨機整數:

>>> random.randint(0,99)

21

 

隨機選取0到100間的偶數:

>>> random.randrange(0, 101, 2)

42

 

14.動態對象操作

14.1 動態執行運算式

>>> x = 1
>>> print eval(‘x+1‘)    # 該函數將字串str當成有效Python運算式來求值,並返回計算結果,但不能動態更新值,如:eval("x=2")會報錯。
2

14.2 動態擷取更新變數值

>>> d = {"name":"wei"}
>>> d2 = {"age":20}
>>> vars()[‘d‘]
{‘name‘: ‘wei‘}
>>> vars()[‘d‘].update(d2)  # 如果全域變數使用globals()
>>> print d
{‘age‘: 20, ‘name‘: ‘wei‘}
>>> d3 = {"phone":"139"}
>>> exec("d.update(d3)")
>>> print d
{‘phone‘: ‘139‘, ‘age‘: 20, ‘name‘: ‘wei‘}
>>> print vars()["d"]
{‘phone‘: ‘139‘, ‘age‘: 20, ‘name‘: ‘wei‘}
>>> print exec("d")  # exec語句將字串str當成有效Python代碼來執行,但不傳回值。
File "<input>", line 1
print exec("d")
^
SyntaxError: invalid syntax

14.3 動態擷取設定屬性值

u = User.objects.get(id=1)
name = getattr(u, "username", "wei")  # 第三個參數未預設值
kwargs = {"username": name}
User.objects.filter(id=1).update(**kwargs)
setattr(u, "username", "wei")

Python常用函數筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.