python基礎(6):python 隨機數函數與 sort/sorted 函數詳解

一、python 隨機數生成

Python中的random模塊用於生成隨機數。下面介紹一下random模塊中最經常使用的幾個函數。 python

1.1 random.random

random.random()用於生成一個0到1的隨機符點數: 0 <= n < 1.0

1.2 random.uniform

random.uniform的函數原型爲:random.uniform(a, b),用於生成一個指定範圍內的隨機符點數,兩個參數其中一個是上限,一個是下限。若是a > b,則生成的隨機數n: a <= n <= b。若是 a <b, 則 b <= n <= a。

print random.uniform ( 10 , 20 )
print random.uniform ( 20 , 10 ) #---- 結果(不一樣機器上的結果不同)
#18.7356606526
#12.5798298022

1.3 random.randint

random.randint()的函數原型爲:random.randint(a, b),用於生成一個指定範圍內的整數。其中參數a是下限,參數b是上限,生成的隨機數n: a <= n <= b
print random.randint ( 12 , 20 ) #生成的隨機數n: 12 <= n <= 20
print random.randint ( 20 , 20 ) #結果永遠是20
#print random.randint(20, 10) #該語句是錯誤的。下限必須小於上限。

1.4 random.randrange

random.randrange的函數原型爲:random.randrange([start], stop[, step]),從指定範圍內,按指定基數遞增的集合中 獲取一個隨機數。如:random.randrange(10, 100, 2),結果至關於從[10, 12, 14, 16, ... 96, 98]序列中獲取一個隨機數。
random.randrange ( 10 , 100 , 2 )

在結果上與 random.choice(range(10, 100, 2) 等效。 web

1.5 random.choice

random.choice從序列中獲取一個隨機元素。其函數原型爲:random.choice(sequence)。參數sequence表示一個有序類型。這裏要說明一下:sequence在python不是一種特定的類型,而是泛指一系列的類型。list, tuple, 字符串都屬於sequence。有關sequence能夠查看python手冊數據模型這一章 。下面是使用choice的一些例子:
print random.choice ( "學習Python" )
print random.choice ( [ "JGood" , "is" , "a" , "handsome" , "boy" ] )
print random.choice ( ( "Tuple" , "List" , "Dict" ) )

1.6 random.shuffle

random.shuffle的函數原型爲:random.shuffle(x[, random]),用於將一個列表中的元素打亂。如:
p = [ "Python" , "is" , "powerful" , "simple" , "and so on..." ]
random.shuffle ( p )
print p
#---- 結果(不一樣機器上的結果可能不同。)
#['powerful', 'simple', 'is', 'Python', 'and so on...']
list = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
slice = random.sample ( list , 5 ) #從list中隨機獲取5個元素,做爲一個片段返回
print slice
print list #原有序列並無改變。

上面這些方法是random模塊中最經常使用的,在Python手冊中,還介紹其餘的方法。感興趣的朋友能夠經過查詢Python手冊瞭解更詳細的信息。 app

最後我們用上面介紹的隨機函數來簡單的模擬下黑客帝國的隨機字符滾屏效果 :) dom

#coding:utf-8
#
#簡單的幾句Python語句,模擬滾動的Matrix屏保
#
# 1. 打開Windows命令行(運行-》輸入「cmd」而後回車)
# 2. 打開命令行屬性設置,設置背景爲黑色,前景爲綠色
# 3. 執行這個腳本,就能夠看到相似電影《駭客帝國》中的經典滾屏了 – 不過是反着的。。。
#
#呵呵,無聊之做。。。Alt+Enter全屏觀看效果更好

import random, string
a = " " * 100 + string.printable
while True:
    print a[random.randint(0,len(a)-1)],

二、Python sort/sorted函數詳解

2.1 sort函數

sort函數是序列的內部函數 函數

2.1.1 函數原型:

L.sort ( cmp = None , key = None , reverse = False )

2.1.2 函數做用:

它是把L原地排序,也就是使用後並非返回一個有序的序列副本,而是把當前序列變得有序

2.1.3 參數說明:

(1) cmp參數
cmp接受一個函數,拿整形舉例,形式爲:
def f ( a , b ) :
     return a - b

若是排序的元素是其餘類型的,若是a邏輯小於b,函數返回負數;a邏輯等於b,函數返回0;a邏輯大於b,函數返回正數就好了 學習

(2) key參數
key也是接受一個函數,不一樣的是,這個函數只接受一個元素,形式以下 google

def f ( a ) :
     return len ( a )

key接受的函數返回值,表示此元素的權值,sort將按照權值大小進行排序 spa

(3) reverse參數
接受False 或者True 表示是否逆序 命令行

2.1.4 sort舉例:

(1)按照元素長度排序
L = [ { 1 : 5 , 3 : 4 } , { 1 : 3 , 6 : 3 } , { 1 : 1 , 2 : 4 , 5 : 6 } , { 1 : 9 } ]
def f ( x ) :
     return len ( x )
sort ( key = f )
print L

輸出: code

[ { 1 : 9 } , { 1 : 5 , 3 : 4 } , { 1 : 3 , 6 : 3 } , { 1 : 1 , 2 : 4 , 5 : 6 } ]

(2)按照每一個字典元素裏面key爲1的元素的值排序

L = [ { 1 : 5 , 3 : 4 } , { 1 : 3 , 6 : 3 } , { 1 : 1 , 2 : 4 , 5 : 6 } , { 1 : 9 } ]
def f2 ( a , b ) :
     return a [ 1 ] - b [ 1 ]
L.sort ( cmp = f2 )
print L

輸出:

[ { 1 : 1 , 2 : 4 , 5 : 6 } , { 1 : 3 , 6 : 3 } , { 1 : 5 , 3 : 4 } , { 1 : 9 } ]

或者例如:http_details.sort(cmp=lambda x,y: cmp(x[3], y[3])) # 按 key 爲 3 的元素的值進行排序:sort by size

詳見:https://code.google.com/p/selenium-profiler/source/browse/trunk/web_profiler.py

2.2 sorted函數

sorted 函數是內建函數,他接受一個序列,返回有序的副本。
它與sort的惟一區別就是會返回副本。

三、Referer:

http://codingso.sinaapp.com/archives/38

http://codingso.sinaapp.com/archives/40

http://www.2maomao.com/blog/several-python-scripts-wrote-recently/

相關文章
相關標籤/搜索