案例:如何在下列列表data中篩選出大於0的數
data = [1, -1, 2, 3, 4, 7]复制代码
使用filter函數,第一個參數為一個函數,也可以像以下程式碼傳入一個lambda表達式。
list(filter(lambda x: x >= 0, data))复制代码
另一種方案是像如下使用列表生成式,這種方案相對於上一種方案更有效率。
print([x for x in data if x >= 0])复制代码
在字典這個資料結構中,也可以使用類似的字典生產式。
from random import randint d = { x: randint(60, 100) for x in range(1, 21)} {k:v for k, v in d.items() if v >= 90}复制代码
方案:定義常數,使用常數索引元組中的元素,例如下列程式碼
stu = ('hao', 18, 'male', '1078244513@qq.com') NAME = 0AGE = 1SEX = 2print(stu[SEX])复制代码
方案:使用collections包的namedtuple的函數,該函數會傳回一個新"類別"的定義,使用方式如下。
from collections import namedtuple Stu = namedtuple('Stu', ['name', 'age', 'sex', 'email'])# stu = Stu('hao', 18, 'male', '1078244513@qq.com')stu = Stu(name='hao', age=18, sex='male', email='1078244513@qq.com') print(stu.email)复制代码
#問題: 統計下列數字清單中每個數字出現的次數
from random import randint data = [randint(0, 20) for _ in range(30)]复制代码
方案:定義一個dict(字典),然後遍歷數組。
c = dict.fromkeys(data, 0)复制代码
上述程式碼會產生一個data中不同值為鍵,以0為值的一個字典物件。
for x in data: c[x] += 1复制代码
方案:使用collections套件中的Counter函數
c2 = Counter(data)复制代码
這個方案也可以方便的取得到出現次數最多的前幾個。
c2.most_common(3)复制代码
問題:對以下字典中的值進行排序
cj = {x: randint(60, 100) for x in 'xyzabc'}复制代码
方案:sorted函數中的第二個參數,可以傳入一個函數對象,sorted會根據該函數的返回值進行排序。
sorted(cj.items(), key=lambda item:item[1])复制代码
註:該函數傳回一個新的字典物件
首先,介紹一下python中的採樣函數sample,它位於random包中。此接收一個序列類型的參數和一個數字,返回一個隨機從序列中隨機取樣獲得一個序列。如下代碼。
from random import sample sample('abcdefg', 3)复制代码
問題:如何取得下列三個集合的公共鍵。
s1 = {x : randint(1, 4) for x in sample('abcdefg', randint(3, 6))} s2 = {x : randint(1, 4) for x in sample('abcdefg', randint(3, 6))} s3 = {x : randint(1, 4) for x in sample('abcdefg', andint(3, 6))}复制代码
可以使用集合的交集運算完成這項任務。
s1.keys() & s2.keys() & s3.keys()复制代码
collections包的OrderedDict類型,會保持進入字典的順序。
相關免費學習推薦:python影片教學
以上是寫給Python程式設計高手之 資料結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!