日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python中的高级数据结构

發(fā)布時(shí)間:2023/12/10 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python中的高级数据结构 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://blog.jobbole.com/65218/

本文由?伯樂在線?-?熊崽Kevin?翻譯自?pypix.com。歡迎加入技術(shù)翻譯小組。轉(zhuǎn)載請參見文章末尾處的要求。

數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu)的概念很好理解,就是用來將數(shù)據(jù)組織在一起的結(jié)構(gòu)。換句話說,數(shù)據(jù)結(jié)構(gòu)是用來存儲一系列關(guān)聯(lián)數(shù)據(jù)的東西。在Python中有四種內(nèi)建的數(shù)據(jù)結(jié)構(gòu),分別是List、Tuple、Dictionary以及Set。大部分的應(yīng)用程序不需要其他類型的數(shù)據(jù)結(jié)構(gòu),但若是真需要也有很多高級數(shù)據(jù)結(jié)構(gòu)可供選擇,例如Collection、Array、Heapq、Bisect、Weakref、Copy以及Pprint。本文將介紹這些數(shù)據(jù)結(jié)構(gòu)的用法,看看它們是如何幫助我們的應(yīng)用程序的。

關(guān)于四種內(nèi)建數(shù)據(jù)結(jié)構(gòu)的使用方法很簡單,并且網(wǎng)上有很多參考資料,因此本文將不會討論它們。

1. Collections

collections模塊包含了內(nèi)建類型之外的一些有用的工具,例如Counter、defaultdict、OrderedDict、deque以及nametuple。其中Counter、deque以及defaultdict是最常用的類。

1.1 Counter()

如果你想統(tǒng)計(jì)一個(gè)單詞在給定的序列中一共出現(xiàn)了多少次,諸如此類的操作就可以用到Counter。來看看如何統(tǒng)計(jì)一個(gè)list中出現(xiàn)的item次數(shù):

1 2 3 4 5 from collections import Counter li = ["Dog", "Cat", "Mouse", 42, "Dog", 42, "Cat", "Dog"] a = Counter(li) print a # Counter({'Dog': 3, 42: 2, 'Cat': 2, 'Mouse': 1})

若要統(tǒng)計(jì)一個(gè)list中不同單詞的數(shù)目,可以這么用:

1 2 3 4 5 6 7 from collections import Counter li = ["Dog", "Cat", "Mouse", 42, "Dog", 42, "Cat", "Dog"] a = Counter(li) print a # Counter({'Dog': 3, 42: 2, 'Cat': 2, 'Mouse': 1}) print len(set(li)) # 4

如果需要對結(jié)果進(jìn)行分組,可以這么做:

1 2 3 4 5 6 7 8 9 10 from collections import Counter li = ["Dog", "Cat", "Mouse","Dog","Cat", "Dog"] a = Counter(li) print a # Counter({'Dog': 3, 'Cat': 2, 'Mouse': 1}) print "{0} : {1}".format(a.values(),a.keys())? # [1, 3, 2] : ['Mouse', 'Dog', 'Cat'] print(a.most_common(3)) # [('Dog', 3), ('Cat', 2), ('Mouse', 1)]

以下的代碼片段找出一個(gè)字符串中出現(xiàn)頻率最高的單詞,并打印其出現(xiàn)次數(shù)。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 import re from collections import Counter string = """?? Lorem ipsum dolor sit amet, consectetur ????adipiscing elit. Nunc ut elit id mi ultricies ????adipiscing. Nulla facilisi. Praesent pulvinar, ????sapien vel feugiat vestibulum, nulla dui pretium orci, ????non ultricies elit lacus quis ante. Lorem ipsum dolor ????sit amet, consectetur adipiscing elit. Aliquam ????pretium ullamcorper urna quis iaculis. Etiam ac massa ????sed turpis tempor luctus. Curabitur sed nibh eu elit ????mollis congue. Praesent ipsum diam, consectetur vitae ????ornare a, aliquam a nunc. In id magna pellentesque ????tellus posuere adipiscing. Sed non mi metus, at lacinia ????augue. Sed magna nisi, ornare in mollis in, mollis ????sed nunc. Etiam at justo in leo congue mollis. ????Nullam in neque eget metus hendrerit scelerisque ????eu non enim. Ut malesuada lacus eu nulla bibendum ????id euismod urna sodales.? """ words = re.findall(r'\w+', string) #This finds words in the document lower_words = [word.lower() for word in words] #lower all the words word_counts = Counter(lower_words) #counts the number each time a word appears print word_counts # Counter({'elit': 5, 'sed': 5, 'in': 5, 'adipiscing': 4, 'mollis': 4, 'eu': 3, # 'id': 3, 'nunc': 3, 'consectetur': 3, 'non': 3, 'ipsum': 3, 'nulla': 3, 'pretium': # 2, 'lacus': 2, 'ornare': 2, 'at': 2, 'praesent': 2, 'quis': 2, 'sit': 2, 'congue': 2, 'amet': 2, # 'etiam': 2, 'urna': 2, 'a': 2, 'magna': 2, 'lorem': 2, 'aliquam': 2, 'ut': 2, 'ultricies': 2, 'mi': 2, # 'dolor': 2, 'metus': 2, 'ac': 1, 'bibendum': 1, 'posuere': 1, 'enim': 1, 'ante': 1, 'sodales': 1, 'tellus': 1, # 'vitae': 1, 'dui': 1, 'diam': 1, 'pellentesque': 1, 'massa': 1, 'vel': 1, 'nullam': 1, 'feugiat': 1, 'luctus': 1, # 'pulvinar': 1, 'iaculis': 1, 'hendrerit': 1, 'orci': 1, 'turpis': 1, 'nibh': 1, 'scelerisque': 1, 'ullamcorper': 1, # 'eget': 1, 'neque': 1, 'euismod': 1, 'curabitur': 1, 'leo': 1, 'sapien': 1, 'facilisi': 1, 'vestibulum': 1, 'nisi': 1, # 'justo': 1, 'augue': 1, 'tempor': 1, 'lacinia': 1, 'malesuada': 1})

1.2 Deque

Deque是一種由隊(duì)列結(jié)構(gòu)擴(kuò)展而來的雙端隊(duì)列(double-ended queue),隊(duì)列元素能夠在隊(duì)列兩端添加或刪除。因此它還被稱為頭尾連接列表(head-tail linked list),盡管叫這個(gè)名字的還有另一個(gè)特殊的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。

Deque支持線程安全的,經(jīng)過優(yōu)化的append和pop操作,在隊(duì)列兩端的相關(guān)操作都能夠達(dá)到近乎O(1)的時(shí)間復(fù)雜度。雖然list也支持類似的操作,但是它是對定長列表的操作表現(xiàn)很不錯(cuò),而當(dāng)遇到pop(0)和insert(0, v)這樣既改變了列表的長度又改變其元素位置的操作時(shí),其復(fù)雜度就變?yōu)镺(n)了。

來看看相關(guān)的比較結(jié)果:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 import time from collections import deque num = 100000 def append(c): ????for i in range(num): ????????c.append(i) def appendleft(c): ????if isinstance(c, deque): ????????for i in range(num): ????????????c.appendleft(i) ????else: ????????for i in range(num): ????????????c.insert(0, i) def pop(c): ????for i in range(num): ????????c.pop() def popleft(c): ????if isinstance(c, deque): ????????for i in range(num): ????????????c.popleft() ????else: ????????for i in range(num): ????????????c.pop(0) for container in [deque, list]: ????for operation in [append, appendleft, pop, popleft]: ????????c = container(range(num)) ????????start = time.time() ????????operation(c) ????????elapsed = time.time() - start ????????print "Completed {0}/{1} in {2} seconds: {3} ops/sec".format( ??????????????container.__name__, operation.__name__, elapsed, num / elapsed) # Completed deque/append in 0.0250000953674 seconds: 3999984.74127 ops/sec # Completed deque/appendleft in 0.0199999809265 seconds: 5000004.76838 ops/sec # Completed deque/pop in 0.0209999084473 seconds: 4761925.52225 ops/sec # Completed deque/popleft in 0.0199999809265 seconds: 5000004.76838 ops/sec # Completed list/append in 0.0220000743866 seconds: 4545439.17637 ops/sec # Completed list/appendleft in 21.3209998608 seconds: 4690.21155917 ops/sec # Completed list/pop in 0.0240001678467 seconds: 4166637.52682 ops/sec # Completed list/popleft in 4.01799988747 seconds: 24888.0046791 ops/sec

另一個(gè)例子是執(zhí)行基本的隊(duì)列操作:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 from collections import deque q = deque(range(5)) q.append(5) q.appendleft(6) print q print q.pop() print q.popleft() print q.rotate(3) print q print q.rotate(-1) print q # deque([6, 0, 1, 2, 3, 4, 5]) # 5 # 6 # None # deque([2, 3, 4, 0, 1]) # None # deque([3, 4, 0, 1, 2])

譯者注:rotate是隊(duì)列的旋轉(zhuǎn)操作,Right rotate(正參數(shù))是將右端的元素移動到左端,而Left rotate(負(fù)參數(shù))則相反。

1.3 Defaultdict

這個(gè)類型除了在處理不存在的鍵的操作之外與普通的字典完全相同。當(dāng)查找一個(gè)不存在的鍵操作發(fā)生時(shí),它的default_factory會被調(diào)用,提供一個(gè)默認(rèn)的值,并且將這對鍵值存儲下來。其他的參數(shù)同普通的字典方法dict()一致,一個(gè)defaultdict的實(shí)例同內(nèi)建dict一樣擁有同樣地操作。

defaultdict對象在當(dāng)你希望使用它存放追蹤數(shù)據(jù)的時(shí)候很有用。舉個(gè)例子,假定你希望追蹤一個(gè)單詞在字符串中的位置,那么你可以這么做:

1 2 3 4 5 6 7 8 9 10 11 12 13 from collections import defaultdict s = "the quick brown fox jumps over the lazy dog" words = s.split() location = defaultdict(list) for m, n in enumerate(words): ????location[n].append(m) print location # defaultdict(<type 'list'>, {'brown': [2], 'lazy': [7], 'over': [5], 'fox': [3], # 'dog': [8], 'quick': [1], 'the': [0, 6], 'jumps': [4]})

是選擇lists或sets與defaultdict搭配取決于你的目的,使用list能夠保存你插入元素的順序,而使用set則不關(guān)心元素插入順序,它會幫助消除重復(fù)元素。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 from collections import defaultdict s = "the quick brown fox jumps over the lazy dog" words = s.split() location = defaultdict(set) for m, n in enumerate(words): ????location[n].add(m) print location # defaultdict(<type 'set'>, {'brown': set([2]), 'lazy': set([7]), # 'over': set([5]), 'fox': set([3]), 'dog': set([8]), 'quick': set([1]), # 'the': set([0, 6]), 'jumps': set([4])})

另一種創(chuàng)建multidict的方法:

1 2 3 4 5 6 7 8 9 s = "the quick brown fox jumps over the lazy dog" d = {} words = s.split() for key, value in enumerate(words): ????d.setdefault(key, []).append(value) print d # {0: ['the'], 1: ['quick'], 2: ['brown'], 3: ['fox'], 4: ['jumps'], 5: ['over'], 6: ['the'], 7: ['lazy'], 8: ['dog']}

一個(gè)更復(fù)雜的例子:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class Example(dict): ????def __getitem__(self, item): ????????try: ????????????return dict.__getitem__(self, item) ????????except KeyError: ????????????value = self[item] = type(self)() ????????????return value a = Example() a[1][2][3] = 4 a[1][3][3] = 5 a[1][2]['test'] = 6 print a # {1: {2: {'test': 6, 3: 4}, 3: {3: 5}}}

2. Array

array模塊定義了一個(gè)很像list的新對象類型,不同之處在于它限定了這個(gè)類型只能裝一種類型的元素。array元素的類型是在創(chuàng)建并使用的時(shí)候確定的。

如果你的程序需要優(yōu)化內(nèi)存的使用,并且你確定你希望在list中存儲的數(shù)據(jù)都是同樣類型的,那么使用array模塊很合適。舉個(gè)例子,如果需要存儲一千萬個(gè)整數(shù),如果用list,那么你至少需要160MB的存儲空間,然而如果使用array,你只需要40MB。但雖然說能夠節(jié)省空間,array上幾乎沒有什么基本操作能夠比在list上更快。

在使用array進(jìn)行計(jì)算的時(shí)候,需要特別注意那些創(chuàng)建list的操作。例如,使用列表推導(dǎo)式(list comprehension)的時(shí)候,會將array整個(gè)轉(zhuǎn)換為list,使得存儲空間膨脹。一個(gè)可行的替代方案是使用生成器表達(dá)式創(chuàng)建新的array??创a:

1 2 3 4 import array a = array.array("i", [1,2,3,4,5]) b = array.array(a.typecode, (2*x for x in a))

因?yàn)槭褂胊rray是為了節(jié)省空間,所以更傾向于使用in-place操作。一種更高效的方法是使用enumerate:

1 2 3 4 5 import array a = array.array("i", [1,2,3,4,5]) for i, x in enumerate(a): ????a[i] = 2*x

對于較大的array,這種in-place修改能夠比用生成器創(chuàng)建一個(gè)新的array至少提升15%的速度。

那么什么時(shí)候使用array呢?是當(dāng)你在考慮計(jì)算的因素之外,還需要得到一個(gè)像C語言里一樣統(tǒng)一元素類型的數(shù)組時(shí)。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import array from timeit import Timer def arraytest(): ????a = array.array("i", [1, 2, 3, 4, 5]) ????b = array.array(a.typecode, (2 * x for x in a)) def enumeratetest(): ????a = array.array("i", [1, 2, 3, 4, 5]) ????for i, x in enumerate(a): ????????a[i] = 2 * x if __name__=='__main__': ????m = Timer("arraytest()", "from __main__ import arraytest") ????n = Timer("enumeratetest()", "from __main__ import enumeratetest") ????print m.timeit() # 5.22479210582 ????print n.timeit() # 4.34367196717

3. Heapq

heapq模塊使用一個(gè)用堆實(shí)現(xiàn)的優(yōu)先級隊(duì)列。堆是一種簡單的有序列表,并且置入了堆的相關(guān)規(guī)則。

堆是一種樹形的數(shù)據(jù)結(jié)構(gòu),樹上的子節(jié)點(diǎn)與父節(jié)點(diǎn)之間存在順序關(guān)系。二叉堆(binary heap)能夠用一個(gè)經(jīng)過組織的列表或數(shù)組結(jié)構(gòu)來標(biāo)識,在這種結(jié)構(gòu)中,元素N的子節(jié)點(diǎn)的序號為2*N+1和2*N+2(下標(biāo)始于0)。簡單來說,這個(gè)模塊中的所有函數(shù)都假設(shè)序列是有序的,所以序列中的第一個(gè)元素(seq[0])是最小的,序列的其他部分構(gòu)成一個(gè)二叉樹,并且seq[i]節(jié)點(diǎn)的子節(jié)點(diǎn)分別為seq[2*i+1]以及seq[2*i+2]。當(dāng)對序列進(jìn)行修改時(shí),相關(guān)函數(shù)總是確保子節(jié)點(diǎn)大于等于父節(jié)點(diǎn)。

1 2 3 4 5 6 7 8 9 import heapq heap = [] for value in [20, 10, 30, 50, 40]: ????heapq.heappush(heap, value) while heap: ????print heapq.heappop(heap)

heapq模塊有兩個(gè)函數(shù)nlargest()和nsmallest(),顧名思義,讓我們來看看它們的用法。

1 2 3 4 5 import heapq nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2] print(heapq.nlargest(3, nums)) # Prints [42, 37, 23] print(heapq.nsmallest(3, nums)) # Prints [-4, 1, 2]

兩個(gè)函數(shù)也能夠通過一個(gè)鍵參數(shù)使用更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu),例如:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import heapq portfolio = [ {'name': 'IBM', 'shares': 100, 'price': 91.1}, {'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'FB', 'shares': 200, 'price': 21.09}, {'name': 'HPQ', 'shares': 35, 'price': 31.75}, {'name': 'YHOO', 'shares': 45, 'price': 16.35}, {'name': 'ACME', 'shares': 75, 'price': 115.65} ] cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price']) expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price']) print cheap # [{'price': 16.35, 'name': 'YHOO', 'shares': 45}, # {'price': 21.09, 'name': 'FB', 'shares': 200}, {'price': 31.75, 'name': 'HPQ', 'shares': 35}] print expensive # [{'price': 543.22, 'name': 'AAPL', 'shares': 50}, {'price': 115.65, 'name': 'ACME', # 'shares': 75}, {'price': 91.1, 'name': 'IBM', 'shares': 100}]

來看看如何實(shí)現(xiàn)一個(gè)根據(jù)給定優(yōu)先級進(jìn)行排序,并且每次pop操作都返回優(yōu)先級最高的元素的隊(duì)列例子。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import heapq class Item: ????def __init__(self, name): ????????self.name = name ????def __repr__(self): ????????return 'Item({!r})'.format(self.name) class PriorityQueue: ????def __init__(self): ????????self._queue = [] ????????self._index = 0 ????def push(self, item, priority): ????????heapq.heappush(self._queue, (-priority, self._index, item)) ????????self._index += 1 ????def pop(self): ????????return heapq.heappop(self._queue)[-1] q = PriorityQueue() q.push(Item('foo'), 1) q.push(Item('bar'), 5) q.push(Item('spam'), 4) q.push(Item('grok'), 1) print q.pop() # Item('bar') print q.pop() # Item('spam') print q.pop() # Item('foo') print q.pop() # Item('grok')

4. Bisect

bisect模塊能夠提供保持list元素序列的支持。它使用了二分法完成大部分的工作。它在向一個(gè)list插入元素的同時(shí)維持list是有序的。在某些情況下,這比重復(fù)的對一個(gè)list進(jìn)行排序更為高效,并且對于一個(gè)較大的list來說,對每步操作維持其有序也比對其排序要高效。

假設(shè)你有一個(gè)range集合:

1 a = [(0, 100), (150, 220), (500, 1000)]

如果我想添加一個(gè)range (250, 400),我可能會這么做:

1 2 3 4 5 6 7 import bisect a = [(0, 100), (150, 220), (500, 1000)] bisect.insort_right(a, (250,400)) print a # [(0, 100), (150, 220), (250, 400), (500, 1000)]

我們可以使用bisect()函數(shù)來尋找插入點(diǎn):

1 2 3 4 5 6 7 8 9 import bisect a = [(0, 100), (150, 220), (500, 1000)] bisect.insort_right(a, (250,400)) bisect.insort_right(a, (399, 450)) print a # [(0, 100), (150, 220), (250, 400), (500, 1000)] print bisect.bisect(a, (550, 1200)) # 5

bisect(sequence, item) => index 返回元素應(yīng)該的插入點(diǎn),但序列并不被修改。

1 2 3 4 5 6 7 8 9 10 11 import bisect a = [(0, 100), (150, 220), (500, 1000)] bisect.insort_right(a, (250,400)) bisect.insort_right(a, (399, 450)) print a # [(0, 100), (150, 220), (250, 400), (500, 1000)] print bisect.bisect(a, (550, 1200)) # 5 bisect.insort_right(a, (550, 1200)) print a # [(0, 100), (150, 220), (250, 400), (399, 450), (500, 1000), (550, 1200)]

新元素被插入到第5的位置。

5. Weakref

weakref模塊能夠幫助我們創(chuàng)建Python引用,卻不會阻止對象的銷毀操作。這一節(jié)包含了weak reference的基本用法,并且引入一個(gè)代理類。

在開始之前,我們需要明白什么是strong reference。strong reference是一個(gè)對對象的引用次數(shù)、生命周期以及銷毀時(shí)機(jī)產(chǎn)生影響的指針。strong reference如你所見,就是當(dāng)你將一個(gè)對象賦值給一個(gè)變量的時(shí)候產(chǎn)生的:

1 2 >>> a = [1,2,3] >>> b = a

在這種情況下,這個(gè)列表有兩個(gè)strong reference,分別是a和b。在這兩個(gè)引用都被釋放之前,這個(gè)list不會被銷毀。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class Foo(object): ????def __init__(self): ????????self.obj = None ????????print 'created' ????def __del__(self): ????????print 'destroyed' ????def show(self): ????????print self.obj ????def store(self, obj): ????????self.obj = obj a = Foo() # created b = a del a del b # destroyed

Weak reference則是對對象的引用計(jì)數(shù)器不會產(chǎn)生影響。當(dāng)一個(gè)對象存在weak reference時(shí),并不會影響對象的撤銷。這就說,如果一個(gè)對象僅剩下weak reference,那么它將會被銷毀。

你可以使用weakref.ref函數(shù)來創(chuàng)建對象的weak reference。這個(gè)函數(shù)調(diào)用需要將一個(gè)strong reference作為第一個(gè)參數(shù)傳給函數(shù),并且返回一個(gè)weak reference。

1 2 3 4 5 >>> import weakref >>> a = Foo() created >>> b = weakref.ref(a) >>> b

一個(gè)臨時(shí)的strong reference可以從weak reference中創(chuàng)建,即是下例中的b():

1 2 3 4 >>> a == b() True >>> b().show() None

請注意當(dāng)我們刪除strong reference的時(shí)候,對象將立即被銷毀。

1 2 >>> del a destroyed

如果試圖在對象被摧毀之后通過weak reference使用對象,則會返回None:

1 2 >>> b() is None True

若是使用weakref.proxy,就能提供相對于weakref.ref更透明的可選操作。同樣是使用一個(gè)strong reference作為第一個(gè)參數(shù)并且返回一個(gè)weak reference,proxy更像是一個(gè)strong reference,但當(dāng)對象不存在時(shí)會拋出異常。

1 2 3 4 5 6 7 8 9 10 11 12 >>> a = Foo() created >>> b = weakref.proxy(a) >>> b.store('fish') >>> b.show() fish >>> del a destroyed >>> b.show() Traceback (most recent call last): ??File "", line 1, in ? ReferenceError: weakly-referenced object no longer exists

完整的例子:

引用計(jì)數(shù)器是由Python的垃圾回收器使用的,當(dāng)一個(gè)對象的應(yīng)用計(jì)數(shù)器變?yōu)?,則其將會被垃圾回收器回收。

最好將weak reference用于開銷較大的對象,或避免循環(huán)引用(雖然垃圾回收器經(jīng)常干這種事情)。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import weakref import gc class MyObject(object): ????def my_method(self): ????????print 'my_method was called!' obj = MyObject() r = weakref.ref(obj) gc.collect() assert r() is obj #r() allows you to access the object referenced: it's there. obj = 1 #Let's change what obj references to gc.collect() assert r() is None #There is no object left: it was gc'ed.

提示:只有l(wèi)ibrary模塊中定義的class instances、functions、methods、sets、frozen sets、files、generators、type objects和certain object types(例如sockets、arrays和regular expression patterns)支持weakref。內(nèi)建函數(shù)以及大部分內(nèi)建類型如lists、dictionaries、strings和numbers則不支持。

6. Copy()

通過shallow或deep copy語法提供復(fù)制對象的函數(shù)操作。

shallow和deep copying的不同之處在于對于混合型對象的操作(混合對象是包含了其他類型對象的對象,例如list或其他類實(shí)例)。

  • 對于shallow copy而言,它創(chuàng)建一個(gè)新的混合對象,并且將原對象中其他對象的引用插入新對象。
  • 對于deep copy而言,它創(chuàng)建一個(gè)新的對象,并且遞歸地復(fù)制源對象中的其他對象并插入新的對象中。

普通的賦值操作知識簡單的將心變量指向源對象。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import copy a = [1,2,3] b = [4,5] c = [a,b] # Normal Assignment d = c print id(c) == id(d)????????? # True - d is the same object as c print id(c[0]) == id(d[0])??? # True - d[0] is the same object as c[0] # Shallow Copy d = copy.copy(c) print id(c) == id(d)????????? # False - d is now a new object print id(c[0]) == id(d[0])??? # True - d[0] is the same object as c[0] # Deep Copy d = copy.deepcopy(c) print id(c) == id(d)????????? # False - d is now a new object print id(c[0]) == id(d[0])??? # False - d[0] is now a new object

shallow copy (copy())操作創(chuàng)建一個(gè)新的容器,其包含的引用指向原對象中的對象。

deep copy (deepcopy())創(chuàng)建的對象包含的引用指向復(fù)制出來的新對象。

復(fù)雜的例子:

假定我有兩個(gè)類,名為Manager和Graph,每個(gè)Graph包含了一個(gè)指向其manager的引用,而每個(gè)Manager有一個(gè)指向其管理的Graph的集合,現(xiàn)在我們有兩個(gè)任務(wù)需要完成:

1) 復(fù)制一個(gè)graph實(shí)例,使用deepcopy,但其manager指向?yàn)樵璯raph的manager。

2) 復(fù)制一個(gè)manager,完全創(chuàng)建新manager,但拷貝原有的所有g(shù)raph。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import weakref, copy class Graph(object): ????def __init__(self, manager=None): ????????self.manager = None if manager is None else weakref.ref(manager) ????def __deepcopy__(self, memodict): ????????manager = self.manager() ????????return Graph(memodict.get(id(manager), manager)) class Manager(object): ????def __init__(self, graphs=[]): ????????self.graphs = graphs ????????for g in self.graphs: ????????????g.manager = weakref.ref(self) a = Manager([Graph(), Graph()]) b = copy.deepcopy(a) if [g.manager() is b for g in b.graphs]: ????print True # True if copy.deepcopy(a.graphs[0]).manager() is a: ????print True # True

7. Pprint()

Pprint模塊能夠提供比較優(yōu)雅的數(shù)據(jù)結(jié)構(gòu)打印方式,如果你需要打印一個(gè)結(jié)構(gòu)較為復(fù)雜,層次較深的字典或是JSON對象時(shí),使用Pprint能夠提供較好的打印結(jié)果。

假定你需要打印一個(gè)矩陣,當(dāng)使用普通的print時(shí),你只能打印出普通的列表,不過如果使用pprint,你就能打出漂亮的矩陣結(jié)構(gòu)

如果

1 2 3 4 5 6 7 8 9 import pprint matrix = [ [1,2,3], [4,5,6], [7,8,9] ] a = pprint.PrettyPrinter(width=20) a.pprint(matrix) # [[1, 2, 3], #? [4, 5, 6], #? [7, 8, 9]]

額外的知識

一些基本的數(shù)據(jù)結(jié)構(gòu)

1. 單鏈鏈表

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 class Node: ????def __init__(self): ????????self.data = None ????????self.nextNode = None ????def set_and_return_Next(self): ????????self.nextNode = Node() ????????return self.nextNode ????def getNext(self): ????????return self.nextNode ????def getData(self): ????????return self.data ????def setData(self, d): ????????self.data = d class LinkedList: ????def buildList(self, array): ????????self.head = Node() ????????self.head.setData(array[0]) ????????self.temp = self.head ????????for i in array[1:]: ????????????self.temp = self.temp.set_and_return_Next() ????????????self.temp.setData(i) ????????????self.tail = self.temp ????????return self.head ????def printList(self): ????????tempNode = self.head ????????while(tempNode!=self.tail): ????????????print(tempNode.getData()) ????????????tempNode = tempNode.getNext() ????????print(self.tail.getData()) myArray = [3, 5, 4, 6, 2, 6, 7, 8, 9, 10, 21] myList = LinkedList() myList.buildList(myArray) myList.printList()

?

2. 用Python實(shí)現(xiàn)的普林姆算法

譯者注:普林姆算法(Prims Algorithm)是圖論中,在加權(quán)連通圖中搜索最小生成樹的算法。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 from collections import defaultdict from heapq import heapify, heappop, heappush def prim( nodes, edges ): ????conn = defaultdict( list ) ????for n1,n2,c in edges: ????????conn[ n1 ].append( (c, n1, n2) ) ????????conn[ n2 ].append( (c, n2, n1) ) ????mst = [] ????used = set( nodes[ 0 ] ) ????usable_edges = conn[ nodes[0] ][:] ????heapify( usable_edges ) ????while usable_edges: ????????cost, n1, n2 = heappop( usable_edges ) ????????if n2 not in used: ????????????used.add( n2 ) ????????????mst.append( ( n1, n2, cost ) ) ????????????for e in conn[ n2 ]: ????????????????if e[ 2 ] not in used: ????????????????????heappush( usable_edges, e ) ????return mst #test nodes = list("ABCDEFG") edges = [ ("A", "B", 7), ("A", "D", 5), ??????????("B", "C", 8), ("B", "D", 9), ("B", "E", 7), ??????("C", "E", 5), ??????("D", "E", 15), ("D", "F", 6), ??????("E", "F", 8), ("E", "G", 9), ??????("F", "G", 11)] print "prim:", prim( nodes, edges )

總結(jié)

轉(zhuǎn)載于:https://www.cnblogs.com/DjangoBlog/p/3677890.html

總結(jié)

以上是生活随笔為你收集整理的Python中的高级数据结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

91在线播放视频 | 波多野结衣亚洲一区二区 | 国产高清不卡一区二区三区 | 91精品久久香蕉国产线看观看 | 久久黄色美女 | 国产一二三区在线观看 | 亚洲欧洲精品一区二区精品久久久 | 欧美日韩视频在线一区 | 亚洲精品在线一区二区三区 | 中文免费 | 韩国av电影在线观看 | 免费黄色网址网站 | 91av视频在线播放 | 国产视频日韩视频欧美视频 | 成人av电影在线观看 | 亚洲成人国产精品 | 精品一二区 | 久久永久免费视频 | 国产码电影 | 久久午夜视频 | 91视频这里只有精品 | 国产福利精品在线观看 | 一级黄色片在线 | 亚洲精品乱码久久久久久蜜桃欧美 | 高清不卡免费视频 | 国产精品自产拍在线观看 | 美州a亚洲一视本频v色道 | 亚洲在线激情 | 国产中文字幕亚洲 | av黄在线播放 | 久久久精品影视 | 久久九九九九 | 日韩精品视频免费在线观看 | www.com久久久 | 欧美日本在线视频 | 在线av资源| 国产精品一区二区无线 | 日本高清xxxx | 99久高清在线观看视频99精品热在线观看视频 | 国产色一区 | 美女视频黄网站 | 日日干日日操 | 亚洲精品视频在线免费播放 | 操天天操 | 欧美国产视频在线 | 91 中文字幕 | 狠狠躁日日躁狂躁夜夜躁av | 成人国产一区 | 黄色一二级片 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | av中文字幕在线免费观看 | 日韩久久在线 | 国产精品一区二区免费在线观看 | 91色偷偷| 欧美资源在线观看 | 久久免费视频在线 | 国产成人久久av免费高清密臂 | 中文字幕在线观看你懂的 | 射久久久 | 精品一区二区在线看 | 色网站在线免费 | 久久99国产视频 | 在线精品视频免费播放 | 国产精品久久久久久69 | 激情综合站| 日韩视频一区二区三区在线播放免费观看 | 波多野结衣在线中文字幕 | 欧美日本在线视频 | 91成版人在线观看入口 | 国产精品久久久99 | 久久国色夜色精品国产 | 国产在线国偷精品产拍 | av片一区 | 成人毛片100免费观看 | 久久久久久久久综合 | 91丨九色丨蝌蚪丨对白 | av片在线看 | 久草视频观看 | 丁香激情视频 | av一级片在线观看 | 国产色婷婷在线 | 99在线精品视频观看 | 91精品国产成| 亚洲www天堂com| 国产一区视频导航 | 99免费在线| 9999国产精品 | 亚洲视频分类 | 在线99视频 | 美女视频久久久 | 97免费 | 久久久久久国产精品美女 | 国产精品综合久久久久久 | 天天干夜夜爱 | 91丨九色丨蝌蚪丨对白 | 又黄又刺激的网站 | 色av网站 | 国产精品成久久久久三级 | 欧美成人精品三级在线观看播放 | 亚洲视频 一区 | 日韩欧美视频在线 | 日韩色高清 | 亚洲精品1234区 | 欧美日韩一区二区在线 | 亚洲一区二区精品视频 | 久久久私人影院 | 99色视频在线 | 五月开心婷婷网 | 亚洲美女免费精品视频在线观看 | 国产婷婷| 久九视频 | 麻豆系列在线观看 | 欧美坐爱视频 | 成人电影毛片 | 91人网站 | 在线观看久草 | 国产精品99久久久久人中文网介绍 | 欧美日韩视频一区二区三区 | 久久综合九色综合网站 | 亚洲综合网 | 久久久久区 | 91亚州 | 精品免费视频 | 97精品国产97久久久久久免费 | 99九九热只有国产精品 | 一区免费在线 | 国产成人精品亚洲 | 久草精品视频 | 97热久久免费频精品99 | 91成人在线视频 | 91丨九色丨勾搭 | 少妇搡bbbb搡bbb搡aa | 亚洲爱爱视频 | 日韩av在线小说 | 久久久久久久久久久综合 | 国产中的精品av小宝探花 | 免费看色视频 | 在线观看精品视频 | 99久久精品一区二区成人 | 91精品国产91p65| 中文av不卡 | 午夜三级影院 | 91正在播放 | 日韩在线观 | 久久99久久99久久 | 亚洲狠狠操 | 国产精品乱码久久久久久1区2区 | 欧美成人黄色片 | 国内精品久久久久久久久久清纯 | 伊人日日干 | 日本不卡一区二区三区在线观看 | 中文字幕中文 | 99精品视频在线看 | 欧美一区视频 | 贫乳av女优大全 | 美女网站在线免费观看 | 1024手机基地在线观看 | 免费av网站在线 | 国产精品v欧美精品 | 国产精品美女免费看 | 亚洲精品白浆高清久久久久久 | 天天操天天射天天舔 | 免费看片网址 | 日韩二区三区在线 | 亚洲女欲精品久久久久久久18 | 久久久麻豆视频 | 久草青青在线观看 | 国产精品不卡视频 | 日本黄区免费视频观看 | 国产免费美女 | 丁香六月婷婷开心婷婷网 | 日韩中文字幕免费 | 免费黄色在线播放 | 青春草免费在线视频 | 天天在线免费视频 | 欧美一级免费 | 91网站在线视频 | 亚洲片在线 | 少妇18xxxx性xxxx片 | 久久久久国产精品视频 | 黄网站色视频免费观看 | 天天操天天色天天射 | 又爽又黄在线观看 | 久久99久久99久久 | 五月激情婷婷丁香 | www.狠狠插.com| 伊人手机在线 | 日韩在线电影 | 8x8x在线观看视频 | 激情在线网站 | 国产精品夜夜夜一区二区三区尤 | 欧美不卡视频在线 | 国产婷婷色 | 日韩精品久久久免费观看夜色 | 天天鲁一鲁摸一摸爽一爽 | 日韩美在线观看 | 在线视频第一页 | 欧美性色xo影院 | 成人免费毛片aaaaaa片 | 欧美成人精品欧美一级乱 | 免费男女网站 | 黄在线免费观看 | 97超碰资源 | 在线99热| 国产免费久久av | 99久久99精品 | 超碰在线人人草 | 国产成人久久久77777 | 黄色aa久久 | 国产在线观看地址 | 91人人网| 三级视频片 | 激情综合亚洲 | 91片网| 久久成人麻豆午夜电影 | 91av原创| 免费在线 | 免费在线观看不卡av | 欧美国产精品一区二区 | 日韩高清无线码2023 | 国产二区视频在线观看 | 国产精品美女久久久久久2018 | 不卡的av在线播放 | 色综合亚洲精品激情狠狠 | 日韩69av | 国产精品s色 | 亚洲经典视频在线观看 | 免费av观看| 伊人永久在线 | 三级av免费看 | 国产亚洲婷婷免费 | 国产精品久久电影观看 | 久久综合国产伦精品免费 | 免费美女久久99 | 91亚洲精品久久久中文字幕 | av大全在线 | 天天干天天操av | 久久久综合九色合综国产精品 | v片在线播放 | 在线视频 91 | 伊人天堂久久 | 婷婷激情在线观看 | 亚洲一二视频 | 久久国产免费 | 在线免费国产 | 一区二区三区在线看 | 国产无套精品久久久久久 | 国产成人综合精品 | 中文不卡视频在线 | 亚洲h色精品 | 久久精品首页 | 国产品久精国精产拍 | 国产精品黄色 | 久久五月天综合 | 丰满少妇在线观看网站 | 欧美激情视频三区 | 97狠狠操 | 超碰在线免费97 | 99久久国产免费,99久久国产免费大片 | 久久免费国产精品 | 国产精品国产三级国产aⅴ9色 | 久久黄色免费视频 | 日日操网 | 欧美五月婷婷 | 四虎在线免费观看 | 在线观看理论 | 国产伦精品一区二区三区在线 | 亚洲欧美成人综合 | 久久99久久99免费视频 | 国产精品国产三级国产不产一地 | 99久久精品费精品 | 亚洲激情视频在线 | 国产精品 日韩精品 | 久久激情小视频 | 欧美性生活久久 | 国产偷国产偷亚洲清高 | 久久久久久麻豆 | 果冻av在线 | 天天操天天干天天爱 | 国产一区二区网址 | av福利网址导航大全 | 黄色最新网址 | 国产五月色婷婷六月丁香视频 | 992tv在线成人免费观看 | 午夜免费在线观看 | www黄色| 粉嫩av一区二区三区四区在线观看 | 日本视频不卡 | 国产一区二区三区高清播放 | 国产久草在线观看 | 在线小视频你懂的 | 久草青青在线观看 | 天天摸天天弄 | 久久看片网站 | 久久久久久97三级 | 亚洲精品视频在线观看免费 | 欧美成年网站 | 亚洲二区精品 | 亚洲国产精品久久 | 在线免费观看一区二区三区 | 国产精品18videosex性欧美 | 亚洲激情在线视频 | 国产最新福利 | 麻豆成人精品视频 | 日韩在线观看网站 | 色狠狠综合 | a视频在线观看免费 | 国产亚洲午夜高清国产拍精品 | 91亚洲精品视频 | 国产黄在线播放 | 在线视频观看国产 | 欧美性色黄 | 国产精品大全 | 国产精品乱码久久久久久1区2区 | 天天干,狠狠干 | 久久99久久99精品免观看软件 | 99精品视频在线 | 色五月成人 | 亚洲国产资源 | 毛片精品免费在线观看 | 国产亚洲精品电影 | 97av影院| 久草在线99 | 色五月色开心色婷婷色丁香 | 国内外成人在线 | 国产剧情一区 | 久久精品一区二区三区四区 | 国产日韩中文字幕 | 亚洲欧美精品一区二区 | 热久久免费国产视频 | 视频 国产区| 五月婷亚洲 | 亚洲综合爱 | 97超级碰碰碰碰久久久久 | 免费看黄网站在线 | 国产免费人成xvideos视频 | 国产精品 美女 | 国产精品99久久久久人中文网介绍 | 99精品观看 | 911香蕉视频| 国产中文字幕亚洲 | 99视频在线精品 | 色婷婷电影网 | 99福利影院 | 视频一区二区精品 | 久久av影视 | 日韩一区二区免费播放 | 精品福利网站 | 视频在线观看99 | 超碰人人草人人 | 欧美巨乳网 | 九九九视频精品 | av大全免费在线观看 | 狠狠干免费| 最近中文字幕在线播放 | 久久激情五月激情 | 伊人天天操 | 免费高清在线观看成人 | 国产精品免费在线视频 | 91看片成人 | 国产精品欧美一区二区 | 91久久爱热色涩涩 | 日批视频在线播放 | 九九在线国产视频 | 亚洲九九九在线观看 | 99国产视频| 久久久受www免费人成 | 成人四虎影院 | 五月天久久婷婷 | 久久中文网 | 91久久国产综合精品女同国语 | av资源在线看 | 久久狠狠婷婷 | 国产成人精品免高潮在线观看 | 91福利社区在线观看 | 国产精品99久久久久久久久 | 欧美日韩高清国产 | 69精品在线 | 日韩在线免费看 | 久久人人爽人人爽人人 | 日日操日日操 | 亚洲三级在线 | 久久久鲁| 最新91在线视频 | 99久久这里有精品 | 久久优| 日韩视频二区 | 中文字幕国产精品 | 欧美-第1页-屁屁影院 | 在线成人中文字幕 | 免费观看不卡av | 国产精品三级视频 | 国产精品自产拍在线观看中文 | 日韩有码第一页 | 国产精品久久久久久久免费 | 在线免费观看黄色av | 精品亚洲在线 | 日韩精品一区二区三区水蜜桃 | 日韩欧美国产激情在线播放 | 视频一区二区免费 | www看片网站 | 在线中文字幕播放 | 成 人 黄 色 免费播放 | 婷婷九月激情 | 国产精品久久久久久久久久久久冷 | 日日天天| 91久久久久久久 | 国产精品正在播放 | 97色se| 久久久久国产精品午夜一区 | 三级视频片| 91精品国自产在线偷拍蜜桃 | 欧美日韩破处 | 韩国av一区 | 免费观看xxxx9999片 | 国产视频导航 | 久久影视一区 | 日韩精品一区二区在线视频 | 久久涩视频 | 亚洲精品合集 | 奇米影视8888在线观看大全免费 | 欧美性黑人 | 日韩理论在线 | 欧美另类调教 | 免费看久久久 | 国产精品久久久久9999吃药 | 国产精品毛片久久久久久久久久99999999 | 婷婷丁香在线观看 | 久久综合电影 | 69国产成人综合久久精品欧美 | 日韩黄色一区 | 五月婷婷丁香在线观看 | 亚洲欧洲一区二区在线观看 | 99精品视频观看 | 五月天婷婷免费视频 | 国产精品一区二 | 亚洲精品国产精品国自产在线 | 久久夜色精品国产欧美乱极品 | 区一区二在线 | 免费亚洲黄色 | 香蕉网在线播放 | 97涩涩视频| 香蕉久久久久 | 日韩免| 亚洲丝袜一区二区 | 国产香蕉av| 久久国产三级 | 国产精品一区免费观看 | 国产精品成人av在线 | 激情久久久久久久久久久久久久久久 | 日韩成人精品一区二区 | 久久久美女 | 久久久久久久久久久久av | 久久香蕉国产精品麻豆粉嫩av | 日韩欧美在线中文字幕 | 亚洲精品视频大全 | 2021av在线| 国产一区二区三区高清播放 | 狠狠干天天干 | 成人亚洲免费 | 久草在线一免费新视频 | 亚洲精品成人av在线 | 99视频+国产日韩欧美 | 国产精品毛片完整版 | 欧美日韩在线视频一区 | 亚洲高清精品在线 | 四虎影视精品永久在线观看 | 毛片网在线播放 | 久久久久久久久电影 | 国产精品久久一区二区无卡 | 激情婷婷综合网 | 国产一区在线播放 | 狠狠色免费 | 色成人亚洲网 | 四虎在线观看网址 | 欧美黑人xxxx猛性大交 | 亚州黄色一级 | 三级黄免费看 | 天天射天天拍 | 成人毛片网 | 九九精品视频在线看 | 爱av在线网 | 日韩av男人的天堂 | 九色一区二区 | 97福利社 | 欧美精品成人在线 | 91精品视频在线看 | 草久在线观看 | 在线看岛国av | 粉嫩av一区二区三区四区 | 视频一区在线播放 | 91精品一区二区三区蜜桃 | 成人福利av | 婷婷丁香在线视频 | 免费福利影院 | 国内精品久久久久久久久久清纯 | 久久久资源 | 亚洲精品久久激情国产片 | 美女国产精品 | 久久久久久毛片 | 视频在线99re| 婷婷精品在线视频 | www.天天草| 99精品视频免费看 | 99久久精品免费看国产四区 | 国产精品一区二区吃奶在线观看 | 一区二区毛片 | 国偷自产视频一区二区久 | 久久福利综合 | 色哟哟国产精品 | 久久永久免费 | 黄色小说免费在线观看 | 免费网站在线观看成人 | 久久精品女人毛片国产 | 国产高清视频免费最新在线 | 免费在线一区二区 | 国产精品婷婷午夜在线观看 | 深爱激情综合 | 亚洲视频电影在线 | 中文在线天堂资源 | 亚洲午夜久久久久久久久电影网 | 国产91学生粉嫩喷水 | 国产精品都在这里 | 亚洲国产精品成人综合 | 国产精品毛片一区二区在线 | 国产精品破处视频 | 日韩免费高清在线 | 天天曰天天曰 | 日韩精品在线看 | av免费网站在线观看 | 天天色天天操天天爽 | 久久久久欠精品国产毛片国产毛生 | 色小说av| 色久综合| 久久亚洲福利视频 | 免费在线观看a v | 一级片免费视频 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 亚洲成人一二三 | 500部大龄熟乱视频使用方法 | 97超碰在线播放 | aaa毛片视频 | 午夜黄色影院 | 国产99在线播放 | 精品国产中文字幕 | 91精品综合在线观看 | 新版资源中文在线观看 | 国产综合在线视频 | 九九久久电影 | 日韩簧片在线观看 | 在线观看黄色av | 亚洲a资源 | 国产精品视频 | 天堂va在线高清一区 | 成人欧美一区二区三区在线观看 | 99精品成人| 日本二区三区在线 | 国产尤物视频在线 | 91免费版在线观看 | 久久久亚洲网站 | 亚洲mv大片欧洲mv大片免费 | 黄色毛片视频 | 亚洲欧美日韩精品久久奇米一区 | 五月天天av | 久久线视频 | 四虎影院在线观看av | 国产大陆亚洲精品国产 | 国产亚洲精品久久19p | 欧美激情va永久在线播放 | 国产精品美女999 | 九九亚洲视频 | 丁香五月缴情综合网 | 国产高清视频在线播放一区 | 久久久久久高潮国产精品视 | 黄色app网站在线观看 | 日韩av中文在线 | 五月天亚洲综合 | 天天干天天做 | 久久精品欧美 | 日本韩国精品在线 | 国产精品美女久久久久久 | 黄网站www| 在线观看视频 | 男女视频91 | 亚洲香蕉视频 | 免费在线看v| 在线精品一区二区 | 久草免费在线视频观看 | 成人欧美在线 | 欧美日韩精品综合 | 午夜在线看片 | 国内视频| 日批视频在线播放 | 精品久久99| 天天夜夜狠狠操 | 综合激情av | 色婷婷狠狠 | 色99中文字幕 | 国产精品一区在线 | 色综合久久久久网 | 91在线视频在线观看 | 免费日韩一区二区 | 午夜精品福利在线 | 在线观看黄av | 人人干免费 | 91av色| www.狠狠插.com | 日韩一二三区不卡 | 欧美精品在线一区二区 | 黄色www免费 | 五月宗合网 | 免费网站污 | 国产美腿白丝袜足在线av | 精品久久一区二区三区 | 国产精品久久久久久久久久妇女 | 久久99久国产精品黄毛片入口 | 久久国产麻豆 | 亚洲专区免费观看 | 婷婷五月色综合 | 中文字幕一区在线观看视频 | 国产不卡视频 | 狠狠狠狠狠狠 | 久久亚洲精品国产亚洲老地址 | 亚洲精品国产精品国自 | 开心激情久久 | 国产涩涩网站 | 一区二区视频在线播放 | 黄色一级影院 | 狠狠操夜夜操 | 九九亚洲精品 | 日韩精品专区在线影院重磅 | 久久久久久久久亚洲精品 | 黄色在线观看网站 | 国产三级午夜理伦三级 | 超碰97国产精品人人cao | 国内精品久久久久国产 | 91成人精品国产刺激国语对白 | av黄免费看| 久久综合久久综合久久综合 | 激情丁香婷婷 | 丁香婷婷自拍 | 狠狠的干狠狠的操 | 色综合久久久网 | 亚洲欧美视频 | 一区三区视频 | 在线亚洲欧美视频 | 又爽又黄又无遮挡网站动态图 | 91九色蝌蚪视频在线 | 欧美经典久久 | 欧美一区中文字幕 | 色婷婷国产精品一区在线观看 | 黄色av网站在线免费观看 | 国产97在线视频 | 精品视频不卡 | 中文字幕一区二 | 西西大胆免费视频 | 国产成人免费在线 | 免费观看性生交大片3 | 视频二区在线 | 日韩视频1 | 国产精品久久久久久久久费观看 | 91久久久久久久 | 干综合网| 日日色综合 | 91夫妻自拍 | 亚洲欧美婷婷六月色综合 | 日韩av女优视频 | 日本视频不卡 | 插插插色综合 | 亚洲国产电影在线观看 | 久久久精品国产免费观看同学 | 99久久综合国产精品二区 | 国产视频日韩视频欧美视频 | 久久看片| 欧美日韩在线网站 | 在线观看网站你懂的 | 色婷婷激情五月 | 久草精品视频在线看网站免费 | 精品久久五月天 | 欧美性色综合网 | 国产手机视频精品 | 国产一二三四在线观看视频 | 999久久久久| 欧美一级免费高清 | 欧美在线视频一区二区三区 | 国产精品免费视频网站 | 中文字幕视频 | 日韩成人黄色av | 97超碰在线久草超碰在线观看 | 十八岁以下禁止观看的1000个网站 | 国产亚洲精品中文字幕 | 国产99久久久久久免费看 | 91av小视频| 午夜电影中文字幕 | 国产一区二区三区黄 | 久久99久久99精品中文字幕 | 人人爽久久涩噜噜噜网站 | 国产午夜精品av一区二区 | 麻豆影视网站 | 亚洲丝袜一区二区 | 天天综合色网 | 国产理论一区二区三区 | 在线观看免费版高清版 | 99久久精品网 | 特级西西444www高清大视频 | 成人午夜影院在线观看 | 亚洲综合色视频在线观看 | 在线观看网站av | 一区二区三区四区精品视频 | www在线免费观看 | 国产一区二区高清不卡 | 激情婷婷欧美 | 欧美久草在线 | 国产精品久久久久av福利动漫 | 一级黄色大片在线观看 | 久久免费播放 | 国产精品毛片一区二区 | 西西44人体做爰大胆视频 | 四虎永久精品在线 | 国色天香第二季 | 97超碰免费 | 久久久99国产精品免费 | 国产精品99久久久久久武松影视 | 亚洲国产欧美在线人成大黄瓜 | 天天鲁一鲁摸一摸爽一爽 | 国产自产高清不卡 | 亚洲国产免费网站 | 久久精品黄| 中文字幕在 | 香蕉视频在线观看免费 | 成人免费电影 | 久久综合九色 | 99人成在线观看视频 | 欧美成人精品三级在线观看播放 | 91av原创| 999ZYZ玖玖资源站永久 | 91在线视频一区 | 国产激情小视频在线观看 | 探花视频网站 | av免费看在线 | 国产一区二区三区网站 | 欧美性生爱 | 亚洲成人精品在线 | 狠狠干五月天 | 天天操 夜夜操 | 在线国产日韩 | 亚洲国产精品第一区二区 | 一本大道久久精品懂色aⅴ 五月婷社区 | av免费电影网站 | 97综合视频| 一级黄色视屏 | 成人在线电影观看 | 欧美一区二区三区不卡 | 久久伦理网 | 欧美国产精品一区二区 | 亚洲天堂网在线视频 | 欧美一区二区三区四区夜夜大片 | 国产精品久久久久久久久久免费看 | 欧美午夜a| 99国产精品免费网站 | 日韩精品91偷拍在线观看 | 国产91对白在线 | 亚洲激情综合 | 九九有精品 | 免费观看午夜视频 | 亚洲精品视频二区 | 国产a高清| 久久五月婷婷综合 | 成人免费av电影 | 黄色在线小网站 | 国产精品麻豆视频 | 最近中文字幕大全中文字幕免费 | 福利一区二区三区四区 | 最新亚洲视频 | av在线一| 日韩在线视频一区 | 激情网站五月天 | 免费高清在线观看成人 | 在线看的毛片 | 国产成人精品女人久久久 | 人人舔人人干 | 久久视频精品在线观看 | 欧美成人在线免费 | 日日爱网址 | 综合婷婷 | 日本三级久久久 | 亚洲欧美999| 亚洲精品国偷拍自产在线观看蜜桃 | 一区二区三区精品在线视频 | 婷婷六月综合亚洲 | 亚洲欧美日本一区二区三区 | 成人永久视频 | 亚洲精品影视在线观看 | 国产又粗又猛又爽又黄的视频免费 | 在线天堂视频 | 亚洲午夜精品电影 | 四虎在线观看精品视频 | a一片一级| 91精品欧美 | 精品免费一区二区三区 | a色视频 | www国产在线 | 精品毛片一区二区免费看 | 综合亚洲视频 | 在线免费观看视频一区二区三区 | 嫩草av在线| 精品99在线视频 | 人人干在线观看 | 成人午夜电影网 | 国产精品成人在线 | 五月天婷婷丁香花 | 日韩精品高清视频 | 国产成人黄色在线 | 久久成人人人人精品欧 | 一级片视频在线 | 99理论片 | 91亚洲精品久久久蜜桃网站 | 最新极品jizzhd欧美 | 久久精品一区二区三区中文字幕 | 欧美日韩高清一区 | 日韩特级黄色片 | 日韩美女高潮 | 97在线免费观看视频 | 久久精品欧美一区 | 超级碰碰碰碰 | 色a综合 | 国产伦理剧 | 国产h片在线观看 | 亚洲精品ww | 国产精品福利午夜在线观看 | 一级精品视频在线观看宜春院 | 久久精品香蕉 | 久久国产精品99久久久久久老狼 | 日韩字幕在线 | 黄色特一级 | 婷婷色五| 国产精品美女久久久久久久网站 | 久久免费在线观看 | 日本三级吹潮在线 | 狠狠久久 | 国产午夜精品一区二区三区嫩草 | 精品久久久久久国产91 | 亚洲综合色播 | 黄免费在线观看 | 日韩av不卡在线观看 | 久久精品视频免费播放 | 美女国产网站 | 97超碰免费在线观看 | 久久精品国产免费 | 国产麻豆视频 | 日本黄色免费看 | 99视频99| 欧美国产精品一区二区 | 依人成人综合网 | 日日干视频 | 午夜精品av | 精品在线观看一区二区 | 亚洲电影自拍 | 狠狠久久婷婷 | 免费黄色在线 | 黄色av一区二区三区 | 狠狠网亚洲精品 | 在线观看日韩精品 | 三上悠亚在线免费 | 国产精品美女 | 免费看国产a| 91久久人澡人人添人人爽欧美 | 久久96国产精品久久99漫画 | 综合色中文 | 丝袜制服天堂 | 成人小视频在线观看免费 | 97在线影院 | 九九激情视频 | 97超碰资源网 | 久久精品久久久久 | 国产精品99久久久久的智能播放 | 亚洲夜夜网 | 国产精品第一 | 国产精品s色 | 免费在线观看国产黄 | 成人wwwxxx视频 | 久久一视频 | 91精品婷婷国产综合久久蝌蚪 | 成人观看 | 久久久久久久久久久免费视频 | 最近字幕在线观看第一季 | 亚洲 欧美 精品 | 日本精品一区二区在线观看 | 国产日韩中文字幕在线 | 日日干干夜夜 | 国产精彩视频 | 欧美一区二区伦理片 | 国产精品久久久久四虎 | 99久久婷婷国产一区二区三区 | 久久久国产99久久国产一 | 午夜久久视频 | 西西4444www大胆艺术 | 最近中文字幕高清字幕免费mv | 91黄色在线看 | 2021av在线 | 中文字幕中文字幕在线中文字幕三区 | 国产不卡精品视频 | 久久99免费观看 | 国产色资源 | 日韩特黄一级欧美毛片特黄 | 国产一区福利在线 | 亚洲性少妇性猛交wwww乱大交 | 国产在线观看二区 | 亚洲在线精品视频 | 视频在线一区二区三区 | 在线观看你懂的网址 | 69精品久久久 | 精品一二三四五区 | 亚洲高清国产视频 | 91久久久久久久一区二区 | 日韩簧片在线观看 | 国产精品精品久久久 | 激情视频在线高清看 | 中日韩欧美精彩视频 | 国产小视频在线免费观看 | 精品久久久久久一区二区里番 | 久久不射影院 | 日韩二区三区 | 国产精品一区二区三区在线播放 | 992tv在线| 日韩免费播放 | 黄网站色成年免费观看 | 日韩精品一区二区在线视频 | 欧美一区二区在线免费看 | 欧美-第1页-屁屁影院 | 国产精品久久二区 | 国产毛片久久久 | 国产麻豆精品免费视频 | 日日夜夜人人精品 | 永久免费在线 | 国产一级精品视频 | 91在线中文| 国产精品久久久久久久久久久久久 | 免费高清看电视网站 | 精品国产片 | 免费高清在线观看电视网站 | 伊人手机在线 | 亚洲成人精品在线观看 | 精品国产成人在线 | 91九色蝌蚪 | 国产精品av在线免费观看 | 色婷婷视频在线 | 欧美激情在线网站 | 亚洲激情五月 | 国产精久久久久久久 | 精品国产乱码久久久久久1区2匹 | 五月婷婷中文字幕 | 99热这里只有精品免费 | 国产精品入口麻豆www | 国产精品va在线观看入 | 日本一区二区三区免费观看 | 韩国视频一区二区三区 | 深爱开心激情网 | 亚洲丝袜一区 | a色视频| 黄色三级免费 | 日韩一二区在线 | 久久99亚洲网美利坚合众国 | 九九色网 | 人人干狠狠操 | 国产高清免费 | 久久99精品一区二区三区三区 | 久久久国产一区 | 精品久久国产精品 | 国产激情久久久 | 久久午夜网| 中文字幕资源站 | 日韩欧美精品免费 | 欧美一区二区三区特黄 | 日日夜夜添 | 亚洲电影自拍 | 国产精品视频久久久 | 五月婷婷黄色 | 最新av在线网站 | 欧美性粗大hdvideo | 日日夜夜爱 | 国产福利一区二区三区视频 | 欧美日韩亚洲一 | 91麻豆精品91久久久久同性 | 欧美性大战久久久久 | 免费的黄色av| 婷婷五综合 | av网址aaa| 成人黄色在线观看视频 | 黄污网 | 久久久精品一区二区三区 | 国产精品夜夜夜一区二区三区尤 | 国产精品午夜8888 | 亚洲欧美国产精品18p | 五月婷婷在线视频 | 亚洲第一av在线 | 国产精品一区二区三区四区在线观看 | 国产精品九九久久久久久久 |