python中list詳解及實現

來源:互聯網
上載者:User
list為python中的常用資料類型,其為python中內建類,繼承自object。接下來全面介紹list的常見方法及自己實作類別list功能的類 建立list

建立空list

list1 = []

list2 = list()

建立並初始化list

list1 = ['a','b','c',123] #比較常用,類型可以不一致

list2 = list(list1) #傳入的為可迭代對象,如set,tuple,generator

list3 = [i for i in range(10)] # 清單產生器

list4 = [x for x in range(10) if x % 2 == 0] # 產生偶數

list5 = [0] * 5 # 產生 [0, 0, 0, 0, 0] 常見方法

append

append(p_object) 向list末尾添加資料

list1 = []

list1.append('456')

len

len(list1) # 返回list1中元素個數

insert

insert(index, p_object) 向list指定位置(index)插入資料

list1.insert(3,'abc') # 當index 大於等於 list長度,向末尾插入

list1.insert(-2,'abc') # 負數為從後往前數 當index < len(list1) * -1,則為在頭部插入資料 pop

pop(index=None) 彈出指定位置(index)的資料,當index >= len(list1) or index < len(list1) * -1,拋出異常

list1.pop(1)

list1.pop() #彈出末尾資料 remove

remove(value) 移除list中的指定元素,如果list為空白或者指定元素在列表中不存在,拋出異常

list1.remove('abc')

clear

列表清空 index

index( value, start=None, stop=None) 尋找指定元素 sort

對list中元素進行排序 count

count(value) 統計元素出現的次數,較複雜的統計建議通過 from collections import Counter 進行統計 extend

extend(iterable) 對list進行擴充

ist1.extend(list2) # lis2中內容添加至list1後,也可以使用list1 + list2 reverse

對list資料進行反轉

list.reverse() # 從['A','B','C'] 變成 ['C','B','A'] copy

對原始list進行拷貝,產生新的list 遍曆

      list1 = [x for x in range(0,10,2)]        for i in range(len(list1)):        print(list1[i], end=' ')        print()    for x in list1:        print(x, end=' ')        print()    for ind,value in enumerate(list1):        print(ind, value, sep='=', end = ' ')
尋找

list的尋找主要使用切片 切片(slice)

slice為python中內建函數

s1 = slice(0,1) #[0:1] 從0開始,1結束(不包括)

s2 = slice(4) #[0:4]

s3 = slice(0,10,2) #[0:10:2],從0開始,10結束,每次取數中間隔一個值

list1 = [x for x in range(10)]

list1[s1]

list1[0:10:2]

list1[::] #查詢所有元素

list1[5] #取下標為5的數 傳入的為int類型

list1[-5:-2] #也可以取負數 實現list類

這裡採用鏈表進行實現。LinkedList包含size,start,end等屬性和Node類,其中size表示包含Node節點的個數,start為開始節點,end為結束節點。Node類包含pre,next,data屬性,pre的值為前一個Node節點,next的值為後一個節點,data中為放入的資料資訊

      #!/usr/bin python3    # -*- coding:utf-8 -*-            class LinkedList(object):            # 節點類        class __Node(object):            def __init__(self, data, pre, next):                self.pre = pre     # 向前節點                self.next = next   # 向後節點                self.data = data   # 資料            # 初始化 size,開始、結束節點屬性        def __init__(self):            self.__size = 0            self.__start = None            self.__end = None            # 添加資料        def append(self, data):            last_node = self.__end            node = self.__Node(data, last_node, None)            if self.__size == 0:                self.__start = node            else:                last_node.next = node            self.__end = node            self.__size += 1            # 插入資料        def insert(self, index, data):            if index >= self.__size:  # 末尾添加                self.append(data)                return            elif index <= self.__size * -1 or index == 0:   # 開頭添加                next_node = self.__start                node = self.__Node(data, None, next_node)                next_node.pre = node                self.__start = node            else:  # 中間添加                next_node = self.__get_node(index)                pre_node = next_node.pre                node = self.__Node(data, pre_node, next_node)                pre_node.next = node                next_node.pre = node            self.__size += 1            # 彈出資料        def pop(self, index=None):            if index is None:                index = self.__size - 1            if self.__size == 0:                raise IndexError('pop from empty list')            if index >= self.__size or index < self.__size * -1:                raise IndexError('pop index out of range')            pop_node = self.__get_node(index)            pre_node = pop_node.pre            next_node = pop_node.next            if pre_node is None:  # 彈出的為 開前端節點                next_node.pre = None                self.__start = next_node                pop_node.next = None            elif next_node is None:  # 彈出的為 末尾節點                pre_node.next = None                self.__end = pre_node                pop_node.pre = None            else:                pop_node.pre = None                pop_node.next = None                pre_node.next = next_node                next_node.pre = pre_node            self.__size -= 1            # 刪除元素        def remove(self, obj):            pos = None            for ind, value in enumerate(self):                if value == obj:                    pos = ind                    break         &nbs
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.