主頁 > 後端開發 > Python 串列資料型別(list)[學習 Python 必備基礎知識][看此一篇就夠了]

Python 串列資料型別(list)[學習 Python 必備基礎知識][看此一篇就夠了]

2020-10-03 04:21:48 後端開發

您的“關注”和“點贊”,是信任,是認可,是支持,是動力......

如意見相佐,可留言,
本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新,

在這里插入圖片描述

目錄
  • 1 Python 串列資料型別概述
  • 2 Python 創建串列
    • 2.1 使用 [] 直接創建串列
    • 2.2 使用 list() 函式創建串列
  • 3 訪問串列元素
    • 3.1 使用索引訪問串列元素
    • 3.2 使用切片訪問串列元素
  • 4 Python洗掉串列
  • 5 串列基本操作(增刪改查)
    • 5.1 增(添加串列元素)
      • 5.1.1 Python append() 方法添加元素
      • 5.1.2 Python extend() 方法添加元素
      • 5.1.3 Python insert() 方法插入元素
      • 5.1.4 其他方法(使用 + 加法運算子)
    • 5.2 刪(洗掉串列元素)
      • 5.2.1 根據目標元素所在位置的索引進行洗掉
      • 5.2.2 根據元素本身的值進行洗掉
      • 5.2.3 洗掉串列中的所有元素
    • 5.3 改(修改串列元素)
      • 5.3.1 修改單個元素
      • 5.3.2 修改一組元素
    • 5.4 查(查找串列元素)
      • 5.4.1 使用串列提供的index() 方法查找元素
      • 5.4.2 使用串列提供的count()方法查找元素
  • 6 串列排序
    • 6.1 使用串列提供的 sort() 方法排序
    • 6.2 使用 sorted() 內置函式排序
  • 7 文章其他地址
    • 7.1 微信公眾號:碼農阿杰
    • 7.2 CSDN 博客
  • 8 參考資料
    • 8.1 Python 3.8.2 documentation

1 Python 串列資料型別概述

串列是可變序列,通常用于存放同類專案的集合(其中精確的相似程度將根據應用而變化),

串列資料型別,在 Python 中用list表示,可以用type()函式查看,如下所示:

list_demo = ["www.python.org", '碼農阿杰', 100.1, [1, 2, 3, 4]]  # 創建串列,并賦值給變數 list_demo
print(type(list_demo))

運行結果:

<class 'list'>

串列將所有元素都放在一對中括號[ ]里面,相鄰元素之間用逗號,分隔,element1 ~ elementn 表示串列中的元素,個數沒有限制,只要是 Python 支持的資料型別就可以,

串列可以存盤整數、小數(浮點數)、布林值、復數、字串、串列、元組等任何型別的資料,并且同一個串列中元素的型別也可以不同,

注意事項:為了提高程式的可讀性,不建議將不同型別的資料放入到同一個串列中,

如下所示:

[element1, element2, element3, ..., elementn]
["www.python.org", '碼農阿杰', 100.1, [1, 2, 3, 4]]

2 Python 創建串列

2.1 使用 [] 直接創建串列

格式如下:

listname = [element1 , element2 , element3 , ... , elementn]  # 包含多個元素的串列
emptylist = []  # 一個元素都沒有的串列,稱為空串列

對以上格式說明:

  • listname :變數名,創建完串列后,通常會把串列賦值給一個變數,便于呼叫串列,
  • element1 ~ elementn: 表示串列的元素,

使用 [] 直接創建串列舉例,如下所示:

list_demo1 = ['微信公眾號:', '碼農阿杰']
list_demo2 = ['博客園', 'https://www.cnblogs.com/manongajie/']
list_demo3 = ['CSDN 博客', 'https://blog.csdn.net/manongajie']
list_demo4 = ['郵箱', '[email protected]']
list_demo5 = [7, 4, 5, 9, 9, 1, 7, 4, 1]  # QQ
list_demo6 = []  # 空串列

2.2 使用 list() 函式創建串列

使用 list() 內置函式創建串列,其實就是將其它資料型別轉換為串列型別,舉例如下所示:

# 將字串轉換成串列
list_demo1 = list('碼農阿杰')
print(list_demo1)

# 將元組轉換成串列
tuple_demo1 = ('python', 'java', 'php', 'c')
list_demo2 = list(tuple_demo1)
print(list_demo2)

# 創建空串列
list_demo3 = list()
print(list_demo3)

運行結果:

['碼', '農', '阿', '杰']
['python', 'java', 'php', 'c']
[]

3 訪問串列元素

3.1 使用索引訪問串列元素

格式如下所示:

listname[index]

對以上格式說明,

  • listname:表示串列名字,
  • index:表示索引值,Python 支持正索引和負索引,

舉例如下所示:

list_demo4 = ['微信公眾號:碼農阿杰', '博客園 https://www.cnblogs.com/manongajie/', 'CSDN 博客 https://blog.csdn.net/manongajie']

print('list_demo4[0] =', list_demo4[0])
print('list_demo4[1] =', list_demo4[1])
print('list_demo4[2] =', list_demo4[2])
print('list_demo4[-1] =', list_demo4[-1])
print('list_demo4[-2] =', list_demo4[-2])
print('list_demo4[-3] =', list_demo4[-3])

運行結果:

list_demo4[0] = 微信公眾號:碼農阿杰
list_demo4[1] = 博客園 https://www.cnblogs.com/manongajie/
list_demo4[2] = CSDN 博客 https://blog.csdn.net/manongajie
list_demo4[-1] = CSDN 博客 https://blog.csdn.net/manongajie
list_demo4[-2] = 博客園 https://www.cnblogs.com/manongajie/
list_demo4[-3] = 微信公眾號:碼農阿杰

3.2 使用切片訪問串列元素

格式如下所示:

listname[start: end: step]

對以上格式說明,

  • lsitname:表示串列名字,
  • start:表示開始索引,
  • end:表示結束索引,
  • step:表示步長,

各個引數的使用比較靈活,詳情 舉例如下所示:

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

print('list_demo5[::] =', list_demo5[::])  # 三個引數都不寫
print('list_demo5[:2:2] =', list_demo5[:2:2])  # 不寫 start 引數
print('list_demo5[1::2] =', list_demo5[1::2])  # 不寫 end 引數
print('list_demo5[1:2:] =', list_demo5[1:2:])  # 不寫 step 引數
print('list_demo5[1:4:2] =', list_demo5[1:4:2])
print('list_demo5[1:4:3] =', list_demo5[1:4:3])
print('list_demo5[1:2] =', list_demo5[1:2])  # 不要 step 引數

# 不要 step 引數
print('list_demo5[:] =', list_demo5[:])
print('list_demo5[1:] =', list_demo5[1:])
print('list_demo5[2:] =', list_demo5[2:])
print('list_demo5[:1] =', list_demo5[:1])
print('list_demo5[:2] =', list_demo5[:2])
print('list_demo5[1:3] =', list_demo5[1:3])

運行結果:

list_demo5[::] = [1, 2, 3, 4, 5, 6]
list_demo5[:2:2] = [1]
list_demo5[1::2] = [2, 4, 6]
list_demo5[1:2:] = [2]
list_demo5[1:4:2] = [2, 4]
list_demo5[1:4:3] = [2]
list_demo5[1:2] = [2]
list_demo5[:] = [1, 2, 3, 4, 5, 6]
list_demo5[1:] = [2, 3, 4, 5, 6]
list_demo5[2:] = [3, 4, 5, 6]
list_demo5[:1] = [1]
list_demo5[:2] = [1, 2]
list_demo5[1:3] = [2, 3]

4 Python洗掉串列

Python 自帶的有垃圾回識訓制,對于創建好的串列,如果不再使用,Python 會自動將其回收,

當然,也可以手動進行洗掉,那就要使用del關鍵字了,

使用del關鍵字手動洗掉的格式如下:

del listname

對以上格式說明,

  • listname:表示要珊瑚串列的名稱,

舉例如下所示:

list_demo6 = [1, 2, 3, 4, 5]
print(list_demo6)
del list_demo6  # 使用 del 關鍵字洗掉串列 list_demo6
print(list_demo6)  # 洗掉后,再次列印

運行結果:

[1, 2, 3, 4, 5]
Traceback (most recent call last):
  File "D:/Data/PycharmProjects/demo/demo.py", line 68, in <module>
    print(list_demo6)  # 洗掉后,再次列印
NameError: name 'list_demo6' is not defined

5 串列基本操作(增刪改查)

5.1 增(添加串列元素)

5.1.1 Python append() 方法添加元素

格式如下所示:

listname.append(obj)

對以上格式說明,

  • append()append()方法會在串列中添加元素,要注意的是:append()添加的元素在串列的末尾,
  • listname:表示要添加元素的串列,
  • obj:表示要添加到串列末尾的資料,obj如果是串列或元組,會將串列或元組當做一個整體作為要添加元素串列的一個元素,形成一個包含串列或元組的“新串列”(“新串列”指的是串列記憶體地址沒變,元素更新了),

舉例如下所示:

例一,添加資料為字串

list_demo1 = ['微信公眾號', ':']  # 要添加元素的串列 list_demo1
print('---- 原串列 ----:')
print(list_demo1)
list_demo1.append('碼農阿杰')  # 用 append() 函式向串列 list_demo1 的末尾添加的資料為字串
print('---- 添加元素后的串列 ----:')
print(list_demo1)

運行結果:

---- 原串列 ----:
['微信公眾號', ':']
---- 添加元素后的串列 ----:
['微信公眾號', ':', '碼農阿杰']

例二,添加資料為串列

list_demo1 = ['微信公眾號', ':']  # 要添加元素的串列 list_demo1
print('---- 原串列 ----:')
print(list_demo1)
print('---- 添加元素后的串列 ----:')
list_demo1.append([1, 2, 3])  # 用 append() 函式向串列 list_demo1 的末尾添加的資料為串列
print(list_demo1)

運行結果:

---- 原串列 ----:
['微信公眾號', ':']
---- 添加元素后的串列 ----:
['微信公眾號', ':', [1, 2, 3]]

例三,添加資料為元組

list_demo1 = ['微信公眾號', ':']  # 要添加元素的串列 list_demo1
print('---- 原串列 ----:')
print(list_demo1)
print('---- 添加元素后的串列 ----:')
list_demo1.append((1, 2, 3))  # 用 append() 函式向串列 list_demo1 的末尾添加的資料為元組
print(list_demo1)

運行結果:

---- 原串列 ----:
['微信公眾號', ':']
---- 添加元素后的串列 ----:
['微信公眾號', ':', (1, 2, 3)]

5.1.2 Python extend() 方法添加元素

格式如下所示:

listname.extend(obj)

對以上格式說明,

  • extend()extend()會在串列中添加元素,要注意的是extend()添加的元素在串列的末尾,這一點跟append()方法一致,
  • listname:要添加元素的串列,
  • objobj表示要添加到串列末尾的資料,要注意的是:會與append()方法不同,append()方法會將字串、串列或元組當做一個整體作為要添加元素串列的一個元素,形成一個包含字串、串列或元組的“新串列”(“新串列”指的是串列記憶體地址沒變,元素更新了);而extend()方法會將它們包含的元素逐個添加到串列中,不會將它們視為一個整體哦,

舉例如下所示:
例一,添加資料為字串

list_demo1 = ['微信公眾號', ':']  # 要添加元素的串列 list_demo1
print('---- 原串列 ----:')
print(list_demo1)
list_demo1.extend('碼農阿杰')  # 用 extend() 函式向串列 list_demo1 的末尾添加的資料為字串
print('---- 添加元素后的串列 ----:')
print(list_demo1)

運行結果:

---- 原串列 ----:
['微信公眾號', ':']
---- 添加元素后的串列 ----:
['微信公眾號', ':', '碼', '農', '阿', '杰']

例二,添加資料為串列

list_demo1 = ['微信公眾號', ':']  # 要添加元素的串列 list_demo1
print('---- 原串列 ----:')
print(list_demo1)
print('---- 添加元素后的串列 ----:')
list_demo1.extend([1, 2, 3])  # 用 extend() 函式向串列 list_demo1 的末尾添加的資料為串列
print(list_demo1)

運行結果:

---- 原串列 ----:
['微信公眾號', ':']
---- 添加元素后的串列 ----:
['微信公眾號', ':', 1, 2, 3]

例三,添加資料為元組

list_demo1 = ['微信公眾號', ':']  # 要添加元素的串列 list_demo1
print('---- 原串列 ----:')
print(list_demo1)
print('---- 添加元素后的串列 ----:')
list_demo1.extend((1, 2, 3))  # 用 extend() 函式向串列 list_demo1 的末尾添加的資料為元組
print(list_demo1)

運行結果:

---- 原串列 ----:
['微信公眾號', ':']
---- 添加元素后的串列 ----:
['微信公眾號', ':', 1, 2, 3]

5.1.3 Python insert() 方法插入元素

格式如下所示:

listname.insert(index , obj)

對以上格式說明,

  • insert()insert()方法可以在串列中間某個(指定位置)位置插入元素,append()extend()方法只能在串列末尾插入元素,
  • listname:表示要插入元素的串列,
  • index:表示指定位置的索引值,
  • obj:要插入串列的資料,如果插入的資料是串列或元組,insert() 也會將它們視為一個整體,作為一個元素插入到串列中,在這一點上和 append()方法是一樣的,

舉例如下所示:
例一,插入資料為字串

list_demo1 = ['微信公眾號', ':']  # 要添加元素的串列 list_demo1
print('---- 原串列 ----:')
print(list_demo1)
print('---- 添加元素后的串列 ----:')
list_demo1.insert(1, '碼農阿杰')  # 用 insert() 方法向串列 list_demo1 中索引值為 1 的位置添加的資料為字串
print(list_demo1)

運行結果:

---- 原串列 ----:
['微信公眾號', ':']
---- 添加元素后的串列 ----:
['微信公眾號', '碼農阿杰', ':']

例二,插入資料為串列

list_demo1 = ['微信公眾號', ':']  # 要添加元素的串列 list_demo1
print('---- 原串列 ----:')
print(list_demo1)
print('---- 添加元素后的串列 ----:')
list_demo1.insert(1, [1, 2, 3])  # 用 insert() 方法向串列 list_demo1 中索引值為 1 的位置添加的資料為串列
print(list_demo1)

運行結果:

---- 原串列 ----:
['微信公眾號', ':']
---- 添加元素后的串列 ----:
['微信公眾號', [1, 2, 3], ':']

例三,插入資料為元組

list_demo1 = ['微信公眾號', ':']  # 要添加元素的串列 list_demo1
print('---- 原串列 ----:')
print(list_demo1)
print('---- 添加元素后的串列 ----:')
list_demo1.insert(1, (1, 2, 3))  # 用 insert() 方法向串列 list_demo1 中索引值為 1 的位置添加的資料為元組
print(list_demo1)

運行結果:

---- 原串列 ----:
['微信公眾號', ':']
---- 添加元素后的串列 ----:
['微信公眾號', (1, 2, 3), ':']

5.1.4 其他方法(使用 + 加法運算子)

使用+加法運算子將兩個或者多個串列相加,達到拼接串列的目的,這樣做會生成一個新的串列,原有的串列不會被改變,

從執行效率上看,不建議使用此種方法,因為執行效率較低,

建議使用之前介紹的幾種方法(術業有專攻,用專門的方法更專業哦),

舉例如下所示:

list1 = ['微信公眾號:']
list2 = ['碼農阿杰']

print('list1 =', list1)
print('list2 =', list2)
print('list1 + list2 =', list1 + list2)

運行結果:

list1 = ['微信公眾號:']
list2 = ['碼農阿杰']
list1 + list2 = ['微信公眾號:', '碼農阿杰']

5.2 刪(洗掉串列元素)

5.2.1 根據目標元素所在位置的索引進行洗掉

根據目標元素所在位置的索引進行洗掉,需要用del 關鍵字或 pop() 方法,

del關鍵字,是專門用來執行洗掉操作的,不僅可以洗掉串列,還可以洗掉串列中的某些元素,
pop()方法,洗掉串列中指定索引處的元素,

使用格式如下所示:

del listname[index]  # 洗掉串列中的單個元素
del listname[start : end]  # 洗掉串列中某段連續的元素,del 會洗掉從索引 start 到 end 之間的元素,不包括 end 位置的元素, 

對以上格式說明,

  • listname表示要洗掉元素的串列,
  • index表示要洗掉元素的索引值,
  • start表示起始索引值,
  • end表示結束索引值,
listname.pop(index)

對以上格式說明,

  • listname表示要洗掉元素的串列,
  • index表示要洗掉元素的索引值,如果不寫 index 引數,默認會洗掉串列中的最后一個元素,

舉例如下所示:

例一,使用del關鍵字洗掉串列元素
(1)使用del關鍵字洗掉單個元素

list_demo = ['微信公眾號', ':', '碼農阿杰']  # 要洗掉元素的串列

print('洗掉前的串列,list_demo =', list_demo)
del list_demo[1]  # 洗掉索引值 1 所對應的元素
print('洗掉后的串列,list_demo =', list_demo)

運行結果:

洗掉前的串列,list_demo = ['微信公眾號', ':', '碼農阿杰']
洗掉后的串列,list_demo = ['微信公眾號', '碼農阿杰']

(2)使用del關鍵字洗掉某段連續的元素

list_demo = ['微信公眾號', ':', '碼農阿杰']  # 要洗掉元素的串列

print('洗掉前的串列,list_demo =', list_demo)
del list_demo[0: 2]  # 洗掉索引值 0 到 2 ,不包括 2 所對應的連續的元素
print('洗掉后的串列,list_demo =', list_demo)

運行結果:

洗掉前的串列,list_demo = ['微信公眾號', ':', '碼農阿杰']
洗掉后的串列,list_demo = ['碼農阿杰']

例二,使用pop()方法洗掉串列元素
(1)指定index引數

list_demo = ['微信公眾號', ':', '碼農阿杰']
print('洗掉前:list_demo =', list_demo)
list_demo.pop(1)  # 洗掉索引值為 1 的元素
print('洗掉后:list_demo =', list_demo)

運行結果:

洗掉前:list_demo = ['微信公眾號', ':', '碼農阿杰']
洗掉后:list_demo = ['微信公眾號', '碼農阿杰']

(2)不指定index引數

list_demo = ['微信公眾號', ':', '碼農阿杰']
print('洗掉前:list_demo =', list_demo)
list_demo.pop()  # 不指定 index 引數,默認洗掉最后一個元素
print('洗掉后:list_demo =', list_demo)

運行結果:

洗掉前:list_demo = ['微信公眾號', ':', '碼農阿杰']
洗掉后:list_demo = ['微信公眾號', ':']

5.2.2 根據元素本身的值進行洗掉

根據元素本身的值進行洗掉,要用到串列提供的remove()方法,

使用格式如下所示:

listname.remove(element)

對以上語法格式說明:

  • remove()remove()方法會根據元素本身的值進行洗掉,要注意的是:①該方法只會洗掉遇見的第一個指定元素,如果串列中還有相同的元素是不會被洗掉的;②必須保證要洗掉的元素在串列中是存在的,否則會報錯,
  • listname:要洗掉元素的串列,
  • element:要洗掉的元素,

舉例如下所示:
(1)串列中存在指定要洗掉的元素

list_demo = ['微信公眾號', ':', '碼農阿杰', '微信公眾號']
print('洗掉前:list_demo =', list_demo)
list_demo.remove('微信公眾號')  # 洗掉指定元素 “微信公眾號”,只會洗掉遇見的第一個指定元素
print('洗掉后:list_demo =', list_demo)

運行結果:

洗掉前:list_demo = ['微信公眾號', ':', '碼農阿杰', '微信公眾號']
洗掉后:list_demo = [':', '碼農阿杰', '微信公眾號']

(2)串列中不存在指定要洗掉的元素

list_demo = ['微信公眾號', ':', '碼農阿杰', '微信公眾號']
print('洗掉前:list_demo =', list_demo)
list_demo.remove('微信號')  # 串列中不存在指定要洗掉的元素,會報錯
print('洗掉后:list_demo =', list_demo)

運行結果:

洗掉前:list_demo = ['微信公眾號', ':', '碼農阿杰', '微信公眾號']
Traceback (most recent call last):
  File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 16, in <module>
    list_demo.remove('微信號')  # 串列中不存在指定要洗掉的元素,會報錯
ValueError: list.remove(x): x not in list

5.2.3 洗掉串列中的所有元素

要洗掉串列中的所有元素,需要使用串列提供的clear()方法,

使用格式如下所示:

listname.clear()

對以上格式說明,

  • clear()clear()方法會洗掉串列中的所有元素,
  • listname:要洗掉所有元素的串列,

舉例如下所示:

list_demo = ['微信公眾號', ':', '碼農阿杰']
print('洗掉前:list_demo =', list_demo)
list_demo.clear()  # 洗掉串列中所有的元素,也可以稱為清空串列
print('洗掉后:list_demo =', list_demo)

運行結果:

洗掉前:list_demo = ['微信公眾號', ':', '碼農阿杰']
洗掉后:list_demo = []

5.3 改(修改串列元素)

5.3.1 修改單個元素

格式如下所示:

listname[index] = element

對以上格式說明,

  • listname:要修改元素的串列,
  • index:要修改元素對應的索引值,
  • element:新元素值,

舉例如下所示:

list_demo = ['微信號', ':', '碼農阿杰']
print('修改前:list_demo =', list_demo)
list_demo[0] = '微信公眾號'  # 修改索引值為 0 的元素
print('修改后:list_demo =', list_demo)

運行結果:

修改前:list_demo = ['微信號', ':', '碼農阿杰']
修改后:list_demo = ['微信公眾號', ':', '碼農阿杰']

5.3.2 修改一組元素

修改一組元素,其實就是使用切片的方式給一組元素賦值,但是,不支持單個賦值(通常指數字,如果是字串的話,Python 會自動把字串轉換成序列,其中的每個字符都是一個元素),

如果不指定步長(指的是不指定step引數),新賦值的元素個數與原來的元素個數可以不相同,如此一來,就說明該操作既可以為串列添加元素(對空切片賦值),也可以為串列洗掉元素,

如果指定步長,就要求新賦值的元素個數與原來的元素個數相同,

舉例如下所示:
例一,不指定步長
(1)修改一組元素的值

list_demo = ['微信號', '=', '碼農阿杰', ',']
print('修改前:list_demo =', list_demo)
list_demo[0: 2] = ['微信公眾號', ':']
print('修改后:list_demo =', list_demo)

運行結果:

修改前:list_demo = ['微信號', '=', '碼農阿杰', ',']
修改后:list_demo = ['微信公眾號', ':', '碼農阿杰', ',']

(2)不支持單個賦值(通常指數字)

list_demo = ['微信號', ':', '碼農阿杰', ',']
print('修改前:list_demo =', list_demo)
list_demo[0: 0] = 12  # 不支持單個賦值(數字)
print('修改后:list_demo =', list_demo)

運行結果:

修改前:list_demo = ['微信號', ':', '碼農阿杰', ',']
Traceback (most recent call last):
  File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 36, in <module>
    list_demo[0: 0] = 12
TypeError: can only assign an iterable

(3)不支持單個賦值(通常指數字),但是,如果是字串的話,Python 會自動把字串轉換成序列,其中的每個字符都是一個元素

list_demo = ['微信號', ':', '碼農阿杰', ',']
print('修改前:list_demo =', list_demo)
list_demo[0: 0] = '微信公眾號'  # 不支持單個賦值(通常指數字),但是,如果是字串的話,Python 會自動把字串轉換成序列,其中的每個字符都是一個元素
print('修改后:list_demo =', list_demo)

運行結果:

修改前:list_demo = ['微信號', ':', '碼農阿杰', ',']
修改后:list_demo = ['微', '信', '公', '眾', '號', '微信號', ':', '碼農阿杰', ',']

(4)為串列添加元素(對空切片賦值)

list_demo = ['碼農阿杰']
print('修改前:list_demo =', list_demo)
list_demo[0: 0] = ['微信公眾號', ':']  # 對空切片賦值
print('修改后:list_demo =', list_demo)

運行結果:

修改前:list_demo = ['碼農阿杰']
修改后:list_demo = ['微信公眾號', ':', '碼農阿杰']

(5)為串列洗掉元素

list_demo = ['微信公眾號', ':', '碼農阿杰', ',']
print('修改前:list_demo =', list_demo)
# 這里切片的寫法有很多種,例如 list_demo[:]、list_demo[0:]、list_demo[0: 4]、list_demo[-4:]等等,就不全部列舉了,可以研究一下切片,
list_demo[:] = ['微信公眾號', ':', '碼農阿杰']  # 新賦值的元素個數與原來的元素個數可以不相同,相當于重新給串列賦值,并且元素個數變少了,
print('修改后:list_demo =', list_demo)

運行結果:

修改前:list_demo = ['微信公眾號', ':', '碼農阿杰', ',']
修改后:list_demo = ['微信公眾號', ':', '碼農阿杰']

例二,指定步長

list_demo = [1, 2, 3, 4, 5, 6, 7]  # 為了看的清楚,用字母添加到純是數字的串列中
print('修改前:list_demo =', list_demo)
list_demo[1: 6: 2] = ['a', 'b', 'c']  # 從索引 1 開始每隔兩個添加一個新元素,到索引 6 ,不包括 索引 6
print('修改后:list_demo =', list_demo)

運行結果:

修改前:list_demo = [1, 2, 3, 4, 5, 6, 7]
修改后:list_demo = [1, 'a', 3, 'b', 5, 'c', 7]

5.4 查(查找串列元素)

5.4.1 使用串列提供的index() 方法查找元素

使用格式如下所示:

listname.index(obj, start, end)

對以上格式說明,

  • 回傳值:index()方法回傳某個元素在串列中出現的位置(索引),如果查找的元素不存在,會報錯,
  • listname:表示串列名稱,
  • obj:表示要查找的元素,
  • start:表示起始位置,可以不寫,表示檢索從開頭到end(不包括end)的元素,
  • end:表示結束位置,可以不寫,表示檢索從start到末尾的元素,
  • startend可以都不寫,表示檢索整個串列;都寫,表示檢索startend(不包括end)之間的元素,

舉例如下所示:

list_demo = [1, 2, 3, 4, 5, 6, 7]  # 串列

index1 = list_demo.index(3)  # 在整個串列中檢索元素 3 的位置
print('在整個串列中檢索元素 3 的位置:', index1)

index2 = list_demo.index(3, )
print('在整個串列中檢索元素 3 的位置:', index2)

index3 = list_demo.index(3)  # 檢索元素 3 在串列中的位置(在串列中的索引值)
print('元素 3 在串列中的位置為:', index3)

index4 = list_demo.index(3, 0, 3)  # 在索引值 0 到 3 之間檢索元素 3 在串列中的位置
print('在索引值 0 到 3 之間檢索元素 3 在串列中的位置為:', index4)

index5 = list_demo.index(3, 0, 2)  # 在索引值 0 到 2 之間檢索元素 3 在串列中的位置,會報錯,因為在這個范圍內沒有元素 3
print('在索引值 0 到 2 之間檢索元素 3 在串列中的位置為:', index5)

# index6 = list_demo.index(11)  # 也會報錯,因為在串列中不存在要查找的元素
# print(index6)

運行結果:

在整個串列中檢索元素 3 的位置: 2
在整個串列中檢索元素 3 的位置: 2
元素 3 在串列中的位置為: 2
在索引值 0 到 3 之間檢索元素 3 在串列中的位置為: 2
Traceback (most recent call last):
  File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 69, in <module>
    index5 = list_demo.index(3, 0, 2)  # 在索引值 0 到 2 之間檢索元素 3 在串列中的位置,會報錯,因為在這個范圍內沒有元素 3
ValueError: 3 is not in list
#Traceback (most recent call last):
#  File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 72, in <module>
#    index6 = list_demo.index(11)  # 也會報錯,因為在串列中不存在要查找的元素
#ValueError: 11 is not in list

5.4.2 使用串列提供的count()方法查找元素

使用格式如下所示:

listname.count(obj)

對以上格式說明,

  • count()方法的回傳值:count()方法回傳某個元素在串列中出現的次數,如果回傳 0,表示串列中不存在該元素,
  • listname:表示串列名,
  • obj:表示要統計的元素,

舉例如下所示:

list_demo = [1, 2, 3, 4, 3, 6, 3]  # 串列

nums1 = list_demo.count(3)  # 統計元素 3 在串列中出現的次數
print('統計元素 3 在串列中出現的次數:', nums1, '次,')

# 判斷串列中是否存在元素 7
nums2 = list_demo.count(7)

if nums2:
    print('串列中存在元素 7 ')
else:
    print('串列中不存在元素 7 ')

運行結果:

統計元素 3 在串列中出現的次數: 3 次,
串列中不存在元素 7 

6 串列排序

6.1 使用串列提供的 sort() 方法排序

對串列進行原地排序,可以使用串列自身提供的sort()方法,

使用格式如下所示:

listname.sort(*, key=None, reverse=False)

對以上格式說明,

  • sort()sort()方法會對串列進行原地排序,即修改原串列,
  • sort()方法接受兩個僅限以關鍵字形式傳入的引數,
  • key:指定帶有一個引數的函式,用于從每個串列元素中提取比較鍵 (例如 key=str.lower), 對應于串列中每一項的鍵會被計算一次,然后在整個排序程序中使用, 默認值 None 表示直接對串列項排序而不計算一個單獨的鍵值,
  • reversereverse 為一個布林值,默認為False,表示升序排序, 如果設為 True,則每個串列元素將按反向順序(降序)比較進行排序,

舉例如下所示:
例一,

list_demo = [4, 1, 3, 2, 8, 5]

print('排序前 list_demo =', list_demo)
list_demo.sort()  # 對串列進行升序排序操作
# list_demo.sort(reverse=False)  # 升序排序操作也可以這么寫
print('升序排序后 list_demo =', list_demo)
list_demo.sort(reverse=True)  # 降序排序
print('降序排序后 list_demo =', list_demo)

運行結果:

排序前 list_demo = [4, 1, 3, 2, 8, 5]
升序排序后 list_demo = [1, 2, 3, 4, 5, 8]
降序排序后 list_demo = [8, 5, 4, 3, 2, 1]

例二,

# 為 key 引數準備調度函式
def take_second(element):
    return element[1]


list_demo = [(1, 3), (3, 5), (2, 4), (5, 1)]

print('排序前 list_demo =', list_demo)
list_demo.sort()  # 升序排序,元組作為串列的元素,排序是以元組的第一個元素進行比較,
print('元組作為串列的元素,排序是以元組的第一個元素進行比較 list_demo =', list_demo)
list_demo.sort(key=take_second)  # 升序排序,元組作為串列的元素,排序是以元組的第二個元素進行比較,
print('元組作為串列的元素,排序是以元組的第一個元素進行比較 list_demo =', list_demo)

運行結果:

排序前 list_demo = [(1, 3), (3, 5), (2, 4), (5, 1)]
元組作為串列的元素,排序是以元組的第一個元素進行比較 list_demo = [(1, 3), (2, 4), (3, 5), (5, 1)]
元組作為串列的元素,排序是以元組的第一個元素進行比較 list_demo = [(5, 1), (1, 3), (2, 4), (3, 5)]

6.2 使用 sorted() 內置函式排序

從一個可迭代物件構建一個新的排序串列,要使用sorted()內置函式,

使用格式如下所示:

sorted(iterable, * ,key=None, reverse=False)

對以上格式說明,

  • 回傳值:sorted()內置函式會根據 iterable 中的項回傳一個新的已排序串列,
  • 具有兩個可選引數,它們都必須指定為關鍵字引數,
  • key: 指定帶有單個引數的函式,用于從 iterable 的每個元素中提取用于比較的鍵 (例如 key=str.lower), 默認值為 None (直接比較元素),
  • reverse :為一個布林值,默認為False,表示升序排序, 如果設為 True,則每個串列元素將按反向順序(降序)比較進行排序,

舉例如下所示:

# 為 key 引數準備調度函式
def take_second(element):
    return element[1]


list_demo = [(1, 3), (3, 5), (2, 4), (5, 1)]

print('排序前 list_demo =', list_demo)
new_list1 = sorted(list_demo, key=None)  # 升序排序,元組作為串列的元素,排序是以元組的第一個元素進行比較,
print('元組作為串列的元素,排序是以元組的第一個元素進行比較 list_demo =', new_list1)
new_list2 = sorted(list_demo, key=take_second)  # 升序排序,元組作為串列的元素,排序是以元組的第二個元素進行比較,
print('元組作為串列的元素,排序是以元組的第一個元素進行比較 list_demo =', new_list2)

運行結果:

排序前 list_demo = [(1, 3), (3, 5), (2, 4), (5, 1)]
元組作為串列的元素,排序是以元組的第一個元素進行比較 list_demo = [(1, 3), (2, 4), (3, 5), (5, 1)]
元組作為串列的元素,排序是以元組的第一個元素進行比較 list_demo = [(5, 1), (1, 3), (2, 4), (3, 5)]

7 文章其他地址

7.1 微信公眾號:碼農阿杰

7.2 CSDN 博客

8 參考資料

8.1 Python 3.8.2 documentation

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/150266.html

標籤:Python

上一篇:Tushare Pro介面介紹

下一篇:跟哥一起學python(3)- 理解“變數”

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more