成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 列表的應用場景有哪些?你使用對了嗎?

開發 后端
我們在前幾篇文章中依次介紹了列表的特性和用法、列表推導式、列表的底層實現。今天來聊一聊列表在實際開發中的應用場景。

 [[387797]]

我們在前幾篇文章中依次介紹了列表的特性和用法、列表推導式、列表的底層實現。今天來聊一聊列表在實際開發中的應用場景。

在開發中,選用何種數據結構是由我們面對的數據特征和業務場景決定的。

數據是單個的還是批量的,是小規模的還是海量的?

數據是獨立的還是彼此關聯的?

數據的生成是隨機的還是有先后順序的?

數據的用途是什么?會不會頻繁讀寫?只讀多還是修改多?

數據是否應用于多線程環境?

......(此處省略 N 多情形。)

一旦確定了數據特征和業務場景,我們就可以從開發工具箱中選擇合適的工具了。

對于 list 而言,首先它是一個對象集合,你可以在處理批量數據時使用 list。

  1. >>> alist =[i for i inrange(21)] 
  2. >>> alist 
  3. [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 
  4. >>> alist.append(2021) 
  5. >>> alist 
  6. [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,2021] 

我們知道,tuple 也可以用來存儲多個對象,但是 tuple 是不可變的,一旦初始化,無法再增減其中的元素的個數。tuple 從語法上保證了元素數目不會被修改。

如果你恰好不希望別人向數據集中增刪元素,你應該優先使用 tuple,而非list。反過來,如果你需要動態調整數據集合中的元素的個數,那就應該選擇 list。

這是否意味著所有動態數據集都可以使用 list 呢?非也。

如果你的數據很少被修改,絕大部分時間都是被讀取的,這很適合使用 list 來存儲。因為 list 為我們提供了索引和切片操作,可以快速訪問其中的元素。

  1. >>> alist 
  2. [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,2021] 
  3. >>> alist[10] 
  4. 10 
  5. >>> alist[3:9] 
  6. [3,4,5,6,7,8] 
  7. >>> alist[3:9:2] 
  8. [3,5,7] 

如果你僅僅使用 append() 在 list 尾部追加元素,或者刪除 list 尾部元素,那也可以放心使用 list。因為,在列表末尾添加和刪除元素非常快。

  1. >>> stack =[3,4,5] 
  2. >>> stack.append(6) 
  3. >>> stack.append(7) 
  4. >>> stack 
  5. [3,4,5,6,7] 
  6. >>> stack.pop() 
  7. >>> stack 
  8. [3,4,5,6] 
  9. >>> stack.pop() 
  10. >>> stack 
  11. [3,4,5] 

這種情形下,list 其實就用作棧(stack)了。

但是,如果你的程序需要頻繁在 list 頭部或中間插入或刪除元素,list 就不太適合你的需求了。

因為,list 底層是通過變長數組實現的。在數組頭部或中間插入或刪除元素,需要逐個移動插入位置之后的每個元素。這在數據量大時會消耗大量時間,效率低下。

而在常見的業務場景中,頻繁增刪中間元素的操作多見于鏈式存儲結構(如鏈表),在線性存儲結構(如數組)中并不多見。

如果想在 Python 中使用鏈式結構,可以使用 collections.deque。嚴格來說,collections.deque 也不是一個完全的鏈式結構,它是一個帶有塊(block)數據的鏈式結構。每個 block 都是一個線性數組。

我們來看一個需要頻繁在數據集的首尾執行操作的場景:隊列(queue)。

隊列是一個先進先出(FIFO)的數據結構,數據從尾部插入,從頭部取出。就好像我們日常排隊一樣。

由于需要頻繁刪除頭部元素,list 也不適合用作隊列。很多初學者僅從list 這個單詞的字面意思來理解,就把 list 作為隊列來使用,這是欠妥的。

我們可以用 collections.deque 來實現隊列操作。

  1. >>>from collections import deque 
  2. >>> queue = deque(["Eric","John","Michael"]) 
  3. >>> queue.append("Terry"
  4. >>> queue.append("Graham"
  5. >>> queue 
  6. deque(['Eric','John','Michael','Terry','Graham']) 
  7. >>>  
  8. >>> queue.popleft() 
  9. 'Eric' 
  10. >>> queue.popleft() 
  11. 'John' 
  12. >>> queue 
  13. deque(['Michael','Terry','Graham']) 

總結一下。

list 適用于處理動態數據集,特別適合用于讀操作遠多于寫操作的場景。

list 可用來實現棧操作。

List 不適合用作隊列,可使用 collections.deque 來實現隊列操作。

本文轉載自微信公眾號「python學與思」,可以通過以下二維碼關注。轉載本文請聯系python學與思公眾號。

 

責任編輯:武曉燕 來源: python學與思
相關推薦

2024-12-31 07:56:33

Disruptor內存有界隊列消費模式

2025-02-11 09:49:12

2020-11-20 10:53:46

邊緣計算

2023-04-03 11:01:26

低代碼平臺場景

2022-10-17 00:27:20

二叉樹數組索引

2023-01-30 11:27:57

人工智能高性能計算CPU

2023-11-28 08:20:25

2022-07-24 21:56:38

元宇宙

2020-10-16 09:09:20

機器學習銀行技術

2024-01-03 10:32:36

2020-09-18 06:39:18

hashMap循環數據

2020-12-21 14:42:42

大數據云計算人工智能

2024-05-29 14:34:07

2022-05-09 07:27:50

ThreadLocaJava

2017-11-01 10:31:08

Docker

2024-11-12 06:27:16

Python列表元組

2023-11-26 00:34:36

Javascript應用方法

2018-03-27 09:10:54

區塊鏈

2017-11-09 13:56:46

數據庫MongoDB水平擴展
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人午夜免费福利视频 | 久久精品成人 | 羞羞色在线观看 | 欧美成人一区二免费视频软件 | 亚洲色图综合 | 亚洲精品久久久久久一区二区 | 高清一区二区三区 | www.国产精品 | 国产综合精品一区二区三区 | 久国久产久精永久网页 | 日本中文字幕一区 | 欧美偷偷操 | 99亚洲国产精品 | 一区二区三区四区不卡 | 国产精品国产精品国产专区不卡 | 美女黄网站 | 精品国产久 | 超碰国产在线 | 99亚洲精品 | 国产精品成人一区二区 | 国产精品永久免费视频 | 欧美午夜视频 | 国产欧美日韩一区二区三区在线观看 | 亚洲精品电影网在线观看 | 国产伦精品 | 精品国产鲁一鲁一区二区张丽 | 日韩欧美国产一区二区 | 国产农村妇女毛片精品久久麻豆 | 中文字幕电影在线观看 | 亚洲国产精品久久久久婷婷老年 | 欧美男人亚洲天堂 | 亚洲啊v在线 | 欧美一级免费 | 国产精品三级久久久久久电影 | 亚洲精品视频播放 | 日韩国产欧美一区 | 一区二区三区国产好的精 | 四虎影院一区二区 | 久久久国产精品入口麻豆 | 欧美日韩视频在线第一区 | 亚洲精品 在线播放 |