【五分鐘】熟悉python列表和元組的異同點【看這篇夠用!建議收藏】

引言

Python,是一種廣泛應用于數據科學、機器學習等領域的高級編程語言,支持多種豐富多樣的數據類型,其中包括列表元組。盡管這兩種數據結構都可用于存儲多個值,但它們在功能和特性上存在著明顯的差異。在接下來的博客中,我們將深入探討Python列表和元組的異同點,幫助你更好地理解和使用這兩種數據結構。

列表和元組的定義

列表可以視為一個有序的元素集合,它支持包含各種類型的對象,例如整數、字符串,甚至可以包含其他列表。在Python中,列表使用方括號[]來表示,元素之間用逗號,進行分隔。

示例代碼

# 構建列表,包含整數對象、元組對象、字符串對象、列表對象、字典對象
my_list = [1, (2,), 'three', [4, 5]]
for element in my_list:# 打印元素的數據類型print(type(element), end="\t")
# 輸出
<class 'int'>	<class 'tuple'>	<class 'str'>	<class 'list'>	<class 'dict'>	

元組也是一個有序的集合,同樣可以包含任意類型的對象,包括數字、字符串、甚至其他元組。元組使用圓括號()來表示,其中的元素用逗號,分隔。例如:

# 構建元組,包含整數對象、列表對象、字符串對象、元組對象
my_tuple = (1, [2], 'three', (4, 5))
for element in my_tuple:# 打印元素的數據類型print(type(element), end="\t")
# 輸出
<class 'int'>	<class 'list'>	<class 'str'>	<class 'tuple'>	

列表和元組的相同點

  1. 都可以通過索引訪問元素:列表和元組都包含一組有序的元素 ? 可以通過索引訪問每個元素

  2. 數據類型多樣化:列表和元組都可以同時包含多種類型的對象,例如整數、浮點數、字符串、布爾值,甚至還可以包含列表或元組本身

示例代碼:

list1 = [1, (2,), 'three', [4, 5], {6: 7}]
tuple1 = (1, [2], 'three', (4, 5))
# 輸出列表list1的第2個元素和最后一個元素
print("{} | {}".format(list1[1], list1[-1]))
# (2,) | {6: 7}# 輸出列表tuple1的第2個元素和最后一個元素
print("{} | {}".format(tuple1[1], tuple1[-1]))
# [2] | (4, 5)
  1. 都支持切片操作:列表和元組都支持切片操作,可以通過切片獲取子序列。

示例代碼:

list1 = [1, (2,), 'three', [4, 5], {6: 7}]
tuple1 = (1, [2], 'three', (4, 5))# 通過切片操作將列表list1分成兩個子列表
print("{} | {}".format(list1[:3], list1[3:]))
# [1, (2,), 'three'] | [[4, 5], {6: 7}]# 通過切片操作將元組tuple1分成兩個子元組
print("{} | {}".format(tuple1[:3], tuple1[3:]))
# (1, [2], 'three') | ((4, 5),)
  1. 都是可迭代對象:列表和元組都是可迭代的,可以通過循環遍歷它們的元素。

示例代碼

list1 = [1, (2,), 'three', [4, 5], {6: 7}]
tuple1 = (1, [2], 'three', (4, 5))for i, element in enumerate(list1):print("列表list1的第{}個元素是:\t{}".format(i+1, element))
# 列表list1的第1個元素是:	1
# 列表list1的第2個元素是:	(2,)
# 列表list1的第3個元素是:	three
# 列表list1的第4個元素是:	[4, 5]
# 列表list1的第5個元素是:	{6: 7}for i, element in enumerate(tuple1):print("元組tuple1的第{}個元素是:\t{}".format(i + 1, element))
# 元組tuple1的第1個元素是:	1
# 元組tuple1的第2個元素是:	[2]
# 元組tuple1的第3個元素是:	three
# 元組tuple1的第4個元素是:	(4, 5)
  1. 都支持連接操作:列表可以通過+操作符和另一個列表連接組成新列表;元組也可以通過+操作符和另一個元組連接組成新元組。

示例代碼:

list1 = [1, (2,), 'three', [4, 5], {6: 7}]
list2 = [8, "9", (10,)]
tuple1 = (1, [2], 'three', (4, 5))
tuple2 = ("six", 7)print(list1 + list2)
# [1, (2,), 'three', [4, 5], {6: 7}, 8, '9', (10,)]
print(tuple1 + tuple2)
# (1, [2], 'three', (4, 5), 'six', 7)
  1. 都支持重復操作:列表和元組都支持使用*操作符對其本身進行復制操作。

示例代碼

list3 = ["+"]
print(list3 * 10)
# ['+', '+', '+', '+', '+', '+', '+', '+', '+', '+']tuple3 = ("+",)
print(tuple3 * 10)
# ('+', '+', '+', '+', '+', '+', '+', '+', '+', '+')
  1. 都支持成員檢測:列表和元組都支持使用in關鍵字檢測一個元素是否存在于列表或元組中

示例代碼

list1 = [1, (2,), 'three', [4, 5], {6: 7}]
print([4, 5] in list1) # True
print({6: 8} in list1) # Falsetuple1 = (1, [2], 'three', (4, 5))
print([2] in tuple1) # True
print(2 in tuple1) # False
  1. 都支持長度查詢:列表和元組都支持使用內置函數len()來查詢它們的長度(元素個數)

示例代碼

list1 = [1, (2,), 'three', [4, 5], {6: 7}]
print(len(list1) # 5tuple1 = (1, [2], 'three', (4, 5))
print(len(tuple1) # 4
  1. 都支持元素賦值
  • 對于列表,可以通過索引操作修改對應元素;
  • 對于元組,雖然元組本身不可變,但可以修改元組中的可變元素(例如列表);

示例代碼

list1 = [1, (2,), 'three', [4, 5], {6: 7}]
print("列表list1修改前", list1)
list1[0] = "1"
print("列表list1修改后", list1)
# 列表list1修改前 [1, (2,), 'three', [4, 5], {6: 7}]
# 列表list1修改后 ['1', (2,), 'three', [4, 5], {6: 7}]tuple1 = (1, [2, 3], 'three', (4, 5))
print("元組tuple1修改前", tuple1)
# tuple1[1] = 3 會引發錯誤,因為元組是不可變的
tuple1[1][0] = 3 # 可以修改元組中的列表元素
print("元組tuple1修改后", tuple1)
# 元組tuple1修改前 (1, [2, 3], 'three', (4, 5))
# 元組tuple1修改后 (1, [3, 3], 'three', (4, 5))
  1. 都支持比較操作:列表和元組都支持使用比較操作符(例如==,!=,<,<=,>,>=)來進行元素比較。比較操作按照元素的順序進行。
list2 = [8, "9", (10,)]
tuple2 = ("six", 7)
print(list2 == [8, "9", (10,)])  # True
print(tuple2 == ("six", 7))  # True
print(list2 == ["8", "9", (10,)])  # False
print(tuple2 == ("six", "7"))  # Falseprint(list2 != [8, "9", (10,)])  # False
print(tuple2 != ("six", 7))  # False
print(list2 != ["8", "9", (10,)])  # True
print(tuple2 != ("six", "7"))  # True

列表和元組的不同點

  1. 列表是可變的,而元組是不可變的 ? 元組一旦創建,就不能通過索引修改它的元素,但可以修改元組中的可變元素。而列表創建后可以添加刪除更改其元素。

示例代碼

list1 = [1, 2, 3]
list1.append(4)  # 添加元素4到列表末尾
print(list1)  # [1, 2, 3, 4]tuple1 = (1, 2, 3, [4, 5])
# tuple1[0] = 5  # 這會引發錯誤,因為元組是不可變的
tuple1[3][0] = 5  # 可以運行,因為元組最后一個元素是列表,列表可以修改元素
print(tuple1)  # (1, 2, 3, [5, 5])
  1. 語法:列表使用方括號[]來表示,而元組使用圓括號()來表示。

  2. 方法:列表有更多的內置方法,例如append(), extend(), insert(), remove(), pop()等。元組的方法較少,常用的有count()和index()

  3. 內存占用:由于元組是不可變的,它們通常比列表占用的內存空間要少。在處理大量數據時,元組的速度通常比列表快

示例代碼

import sys# 創建大量數據
list_data = [0] * 100000000
tuple_data = (0,) * 100000000# 打印初始內存使用情況
print("初始內存使用情況(MB):")
print(sys.getsizeof(list_data) / 1024 / 1024)  # 以MB為單位
print(sys.getsizeof(tuple_data) / 1024 / 1024)  # 以MB為單位# 執行一些操作以查看內存使用情況
list_data.append(1)
tuple_data += (1,)# 打印操作后的內存使用情況(增加的內存用于存儲新添加的元素)
print("添加元素后的內存使用情況(MB):")
print("列表", sys.getsizeof(list_data) / 1024 / 1024)  # 以MB為單位
print("元組", sys.getsizeof(tuple_data) / 1024 / 1024)  # 以MB為單位# 運行結果
# 初始內存使用情況(MB):
# 762.9395065307617
# 762.9394912719727
# 添加元素后的內存使用情況(MB):
# 列表 858.3069686889648
# 元組 762.9394989013672
  1. 列表不可作為字典的鍵,而元組可以

示例代碼

# 使用元組作為字典的鍵
dict_with_tuple_key = {(1, 2): 'value'}
print(dict_with_tuple_key[(1, 2)])  # 輸出:'value'# 使用列表作為字典的鍵(這會引發錯誤,因為列表是可變的)
dict_with_list_key = {[1, 2]: 'value'}  # 報錯
  1. 使用場景:列表適用于存儲可變數量的、可變的數據,例如一個用戶的任務列表。元組則適用于存儲固定數量的、不可變的數據,例如日期、時間、常量等。
  2. 安全性:由于元組的不可變性,因此元組往往比列表更安全,在注重數據安全性的場景下,可以優先考慮使用元組。

結束語

未來如果想到更多列表和元組的異同點,會及時更新~
如果本博文對你有所幫助/啟發,可以點個贊/收藏支持一下,如果能夠持續關注,小編感激不盡~
如果有相關需求/問題需要小編幫助,歡迎私信~
小編會堅持創作,持續優化博文質量,給讀者帶來更好de閱讀體驗~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207546.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207546.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207546.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

天津大數據培訓機構品牌 數據分析師的發展方向

大數據專業還是有一定難度的&#xff0c;畢竟大數據開發技術所包含的編程技術知識是比較雜且多的如果是計算機專業的學生或者自身有一定基礎的人學&#xff0c;相對來說會比較容易&#xff0c;但對于零基礎小伙伴學習來說&#xff0c;想要學習大數據&#xff0c;難度還是很高的…

3D Web可視化平臺助力Aras開發PLM系統:提供數據訪問、可視化和發布功能

HOOPS中文網慧都科技是HOOPS全套產品中國地區指定授權經銷商&#xff0c;提供3D軟件開發工具HOOPS售賣、試用、中文試用指導服務、中文技術支持。http://techsoft3d.evget.com/ Aras是一個面向數字化工業應用的開放性平臺&#xff0c;幫助世界領先的復雜互聯產品制造商轉變其產…

大三上實訓內容

項目一&#xff1a;爬取天氣預報數據 【內容】 在中國天氣網(http://www.weather.com.cn)中輸入城市的名稱&#xff0c;例如輸入信陽&#xff0c;進入http://www.weather.com.cn/weather1d/101180601.shtml#input 的網頁顯示信陽的天氣預報&#xff0c;其中101180601是信陽的…

SpringCloud面試題——Nacos

一&#xff1a;什么是Nacos&#xff1f; 二&#xff1a;服務心跳與服務注冊原理&#xff1f; 在spring容器啟動的時候&#xff0c;nacos客戶端會進行兩步操作。 向nacos服務端發送心跳向nacos服務端注冊當前服務 服務心跳 客戶端在啟動的時候&#xff0c;會開啟一個心跳線程…

私域運營:掌控用戶,領航變革

隨著互聯網技術的迅速進步&#xff0c;眾多電商平臺如雨后春筍般涌現。盡管淘寶、京東等第三方平臺在流量和銷售額方面占據了絕對優勢&#xff0c;但私域流量運營的興起也引發了廣泛關注。盡管尚處于初級階段&#xff0c;但私域運營已成為當前最熱門的話題之一。 私域運營指的…

HttpComponents: 概述

文章目錄 1. 概述2. 生態位 1. 概述 早期的Java想要實現HTTP客戶端需要借助URL/URLConnection或者自己手動從Socket開始編碼&#xff0c;需要處理大量HTTP協議的具體細節&#xff0c;不但繁瑣還容易出錯。 Apache Commons HttpClient的誕生就是為了解決這個問題&#xff0c;它…

高德地圖畫漸變線

高德地圖畫漸變線&#xff0c;思路是將線和顏色均分為多個小線段和小顏色&#xff0c;實現漸變&#xff0c;類似于下圖。 如果需要多段線&#xff0c;自己循環拼一下就可以了&#xff0c;方法返回多個小線段組成的polyline數組。 /** 高德地圖畫漸變線* author: liyun* params…

【WPS】Excel表格數據透視表

數據少量還好&#xff0c;如果輸數多起來就麻煩了&#xff0c;最近需要匯報一個情況。 描述 譬如&#xff1a;開發&#xff08;80.00%->91.16%&#xff09;&#xff1a;共計43項&#xff08;本周新增1項&#xff09;&#xff0c;本周新增已完成2項&#xff0c;共已完成36項…

wps中將橫軸和縱軸數據互換

wps中將橫軸和縱軸數據互換 今天遇到個比較奇怪的需求, 要把excel數據的橫軸和縱軸互換 在我理解中程序做這種事情應該很簡單的 結果搜索好多教程都是說怎么講圖表xy軸互換 終于找到如何轉表格數據的特此記錄一下 復制需要轉換的內容新建一個sheet選擇性粘貼(CtrlAltV)選擇轉置…

Linux高級系統編程 - 5 管道

復制文件描述符 dup函數 作用 : 文件描述符復制 語法 #include <unistd.h> int dup(int oldfd); 參數 : 所需復制的文件描述符 返回值 復制得到的文件描述符 功能 : 從文件描述符表中 , 尋找一個最小可能的文件描述符&#xff08;通過返回值返回&#xff09;作為…

Java--作用域,構造器,this

作用域基本使用 在Java編程中&#xff0c;主要的變量就是屬性&#xff08;成員變量&#xff09;和局部變量。 我們說的局部變量一般是指在成員方法中定義的變量 Java中作用域的分類 全局變量&#xff1a;也就是屬性&#xff0c;作用域為整個類體 局部變量&#xff1a;也就是除了…

RHEL8_Linux訪問NFS存儲及自動掛載

本章主要介紹NFS客戶端的使用 創建FNS服務器并通過NFS共享一個目錄在客戶端上訪問NFS共享的目錄自動掛載的配置和使用 1.訪問NFS存儲 前面介紹了本地存儲&#xff0c;本章就來介紹如何使用網絡上的存儲設備。NFS即網絡文件系統&#xff0c;所實現的是 Linux 和 Linux 之間的共…

新手搭建知識付費平臺必備攻略:如何以低成本實現高轉化?

我有才知識付費平臺 一、引言 隨著知識經濟的崛起&#xff0c;越來越多的知識提供者希望搭建自己的知識付費平臺。然而&#xff0c;對于新手來說&#xff0c;如何以低成本、高效率地實現這一目標&#xff0c;同時滿足自身需求并提高客戶轉化率&#xff0c;是一大挑戰。本文將…

SPA, SEO, SSR總結

SPA單頁面Web應用 SPA(Single page web application) 單頁面Web應用 Web不再是一張張頁面,而是一個整體的應用,一個由路由系統,數據系統,頁面(組件)系統等等,組成的應用程序, 讓用戶不需要每次與服務器進行頁面刷新來獲得新的內容, 從而提供了更快,跟流暢的用戶體驗, 在SPA中…

參與創作①周年啦~

寫在前面 今天看了消息才知道&#xff0c;原來開始創作已經一年了。此篇無干貨&#xff0c;純白話&#xff0c;純記錄。 機緣 參與CSDN創作已經一年有余&#xff0c;猶記得第一篇博文是為了整理好所學內容&#xff0c;方便自己復習。沒想到后面也陸陸續續發了些其他內容&…

關于read函數阻塞的問題

關于read函數阻塞的問題 上一篇文章IO多路轉接之select 末尾提到了一點&#xff0c;服務端讀取每次是讀取10個字節的&#xff0c;如果超過10個字節&#xff0c;需要讀取多次&#xff0c;但是客戶端只會read一次&#xff0c;第二次read的時候&#xff0c;直接阻塞了。 那么如何…

Windows server flask

1、Windows server 通過python的flask執行命令 from flask import Flask, request, abort import subprocess from flask_basicauth import BasicAuth app Flask(__name__) # 獲取url是進行賬號密碼認證&#xff0c;設置url的賬號密碼 app.config[BASIC_AUTH_USERNAME] 賬號…

12.8作業

1.頭文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QMovie>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nul…

spring-boot-starter-validation是什么Validation參數校驗使用概要

spring-boot-starter-validation是什么&Validation參數校驗使用概要 來源Valid和Validated的用法(區別)引入依賴Valid和Validated的用法 在日常的項目開發中&#xff0c;為了防止非法參數對業務造成的影響&#xff0c;需要對接口的參數做合法性校驗&#xff0c;例如在創建用…

基于Docker安裝Mysql:5.5

一、拉取鏡像 sudo docker pull mysql:5.5二、啟動mysql鏡像 1. 創建MySQL的conf目錄和data目錄 mkdir -p /home/docker/mysql/conf /home/docker/mysql/data2. 利用鏡像創建容器 sudo docker run --restartalways -d --name mysql -v /home/docker/mysql/conf/my.cnf:/etc…