Python之--元組

定義

是 Python 中內置的不可變序列

在 Python 中使用()定義元組,元素與元素之間使用英文的逗號分隔。

元組中只有一個元素的時候,逗號也不能省略

元組的創建方式

(1)使用()直接創建元組

語法

元組名=(element1,element2,......elementN)
# 使用小括號創建元組
t=('he1lo',[10,20,30],'python','world')
print(t)

(2)使用內置函數tuple()創建元組

元組名=tuple(序列)
# 使用內置函數tuple()創建元組
t=tuple('helloworld')
print(t)

元組的一些操作

引入
t=tuple([10,20,30,40])
print(t)

?這個例子說明了元組也是屬于序列的。

基本操作
t = tuple([10, 20, 30, 40])
print(t)print('10在元組中是否存在:', (10 in t))
print('10在元組不存在:', (10 not in t))
print('最大值:', max(t))
print('最小值:', min(t))
print('長度:', len(t))
print('t.index:', t.index(10))
print('t.count:', t.count(10))

??只有一個元素的情況
# 如果元組中只有一個元素
t=(10)
print(t,type(t))# 如果元組中只有一個元素,逗號不能省
y=(10,)
print(y,type(y))

?刪除元組
del 元組名

元組的切片?
語法格式

元組切片的基本語法為:tuple [ start : stop : step ] ,其中:

tuple:表示要進行切片操作的元組。

start:指定切片的起始位置(包含該位置的元素),若省略start,則從元組的開頭開始切片,默認值為 0。

stop:指定切片的結束位置(不包含該位置的元素),如果省略stop,則切片到元組的末尾

step:指定切片的步長,即每隔多少個元素取一個,step默認值為 1,表示依次取相鄰元素。

示例?
# 定義原始元組
t = (10, 20, 30, 40, 50, 60, 70, 80, 90)# 1. 獲取部分元素
print("1. 獲取部分元素:")
print("t[1:4] = " + str(t[1:4]))      # 輸出: (20, 30, 40)
print("t[:4] = " + str(t[:4]))        # 輸出: (10, 20, 30, 40)
print("t[3:] = " + str(t[3:]))        # 輸出: (40, 50, 60, 70, 80, 90)# 2. 指定步長
print("\n2. 指定步長:")
print("t[1:7:2] = " + str(t[1:7:2]))  # 輸出: (20, 40, 60)
print("t[::2] = " + str(t[::2]))      # 輸出: (10, 30, 50, 70, 90)# 3. 反向切片
print("\n3. 反向切片:")
print("t[::-1] = " + str(t[::-1]))    # 輸出: (90, 80, 70, 60, 50, 40, 30, 20, 10)
print("t[7:2:-1] = " + str(t[7:2:-1]))  # 輸出: (80, 70, 60, 50, 40)# 4. 負數索引示例
print("\n4. 負數索引示例:")
print("t[-3:] = " + str(t[-3:]))      # 輸出: (70, 80, 90)    

當然也可以同時省略起始值、終止值和步長,但需要保留冒號分隔符

original = (1, 2, 3, 4, 5)
new_tuple = original[:]  # 省略起始值、終止值和步長print(new_tuple)        # 輸出: (1, 2, 3, 4, 5)
print(new_tuple is original)  # 輸出: False(證明是新對象)

這個用法的一些常見應用場景:

(1)創建副本

t = (1, 2, 3)
copy_t = t[:]  # 創建元組的副本

(2)?結合步長反轉元組

reversed_t = t[::-1]  # 步長為-1,從后向前遍歷,輸出: (3, 2, 1)

Python 中,元組(tuple)和列表(list)的切片操作語法完全相同

?元組生成式

使用圓括號()包裹,并返回一個生成器對象。與列表推導式不同,元組生成式不會一次性生成所有元素,而是按需生成

基本語法
(表達式 for 變量 in 可迭代對象 [if 條件表達式])

表達式:對每個元素進行處理的計算邏輯,生成最終的值

for 變量 in 可迭代對象:遍歷可迭代對象(如列表、元組、字符串等)中的每個元素。

if 條件表達式(可選):過濾元素,只對滿足條件的元素執行表達式。

用例
#生成偶數元組
even_numbers = (x for x in range(10) if x % 2 == 0)
print(tuple(even_numbers))  # 輸出: (0, 2, 4, 6, 8)#計算平方元組
squares = (x**2 for x in [1, 2, 3, 4, 5])
print(tuple(squares))  # 輸出: (1, 4, 9, 16, 25)#字符串長度元組
words = ["apple", "banana", "cherry"]
lengths = (len(word) for word in words)
print(tuple(lengths))  # 輸出: (5, 6, 6)
**注意

(1)生成器對象:元組生成式返回的是生成器對象,需要通過 tuple() 轉換為元組或迭代使用。?

(2)一次性使用:生成器對象只能遍歷一次,再次遍歷時會耗盡。

(3)內存效率:適合處理大量數據,避免一次性加載全部元素到內存。

元組與列表的區別

元組列表
不可變序列
無法實現添加、刪除和修改元素等操作
可變序列
append ()、insert ()、remove ()、pop () 等方法實現添加和刪除列表元素
支持切片訪問元素,不支持修改操作支持切片訪問和修改列表中的元素
訪問和處理速度快訪問和處理速度慢
可以作為字典的鍵不能作為字典的鍵

元組的遍歷?

1、for 循環直接遍歷元素
tup = (10, 20, "hello", 3.14)
for element in tup:print(element)

2、結合?enumerate?遍歷

語法結構

for 索引變量, 值變量 in enumerate(可迭代對象):# 循環體,使用 索引變量 和 值變量print(f"索引: {索引變量}, 值: {值變量}")

可以同時取到元素以及對應索引(位置)

tup = (10, 20, "hello", 3.14)
for index, element in enumerate(tup):print(f"索引 {index},元素 {element}")

3、?通過索引遍歷(range + len)

range 的語法格式

#括號內只有一個值的情況
#默認輸出從 0 開始,到倒數第一個元素(意思就是不包含結束值)的整數序列。
range(stop)
#示例
for i in range(5):print(i)  # 輸出: 0, 1, 2, 3, 4#完整格式
range(start, stop, step)
#示例
# 正向,步長2
for i in range(0, 10, 2):print(i)  # 輸出: 0, 2, 4, 6, 8
# 反向,步長-1
for i in range(5, 0, -1):print(i)  # 輸出: 5, 4, 3, 2, 1

?先獲取元組的長度,再用 range 生成索引序列,再通過索引來訪問元素,適合需要精確控制索引的場景。

tup = (10, 20, "hello", 3.14)
for i in range(len(tup)):print(tup[i])

大家會發現這幾種遍歷方式都有?for...in 結構,這是因為列表、元組、字符串等都是 “可迭代對象”,它們內部實現了迭代器協議(即包含 __iter__() 方法)。for...in 循環的底層邏輯就是通過調用對象的迭代器,依次獲取元素,直到遍歷結束。

那這幾種遍歷方式可以簡記為:

1、最基本方式:for + 變量 + in + 可迭代對象;

適用場景:只需元素值,不需要索引。

2、enumerate方式:for + 索引變量,值變量 + in + 可迭代對象;

適用場景:需要同時使用索引和元素值。

3、for + 變量 + in + range(len(可迭代對象));

適用場景:需要手動控制索引。

基于 range 方式的拓展 --?反向遍歷跳步遍歷:

通過結合 range 的參數:

fruits = ["apple", "banana", "cherry"]# 反向遍歷(從后往前)
for i in range(len(fruits)-1, -1, -1):  # 從最后一個索引到0,步長-1print(fruits[i])  # 輸出: cherry, banana, apple# 跳步遍歷(每隔一個元素取一次)
for i in range(0, len(fruits), 2):  # 從0開始,步長2print(fruits[i])  # 輸出: apple, cherry

今天的分享就到這里啦~

謝謝大家的觀看!!

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

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

相關文章

工業相機GigE數據接口的優勢及應用

工業相機不同的數據接口適用的應用場景也不同,選擇合適的數據額接口,可大大提高效率。今天我們來看看常見的GigE接口的優勢及應用。基于GigE Vision標準的千兆以太網(GigE)相機通過提供快速、靈活且成本效益高的成像解決方案&…

【53】MFC入門到精通——MFC串口助手(二)---通信版(發送數據 、發送文件、數據轉換、清空發送區、打開/關閉文件),附源碼

文章目錄1 完整 功能展示2 添加控件變量及聲明2.1 添加控件及變量2.2 SerialPortDlg.h: 頭文件3 函數實現3.1 數據發送3.1.2 寫數據、字符串轉3.2 發送文件3.2.1 打開文件3.2.2 發送文件3.3 清空發送區4 完整MFC項目項下載1 完整 功能展示 串口通信助手 頁面展示,功…

算法學習筆記:27.堆排序(生日限定版)——從原理到實戰,涵蓋 LeetCode 與考研 408 例題

堆排序(Heap Sort)是一種基于二叉堆數據結構的高效排序算法,由計算機科學家 J. W. J. Williams 于 1964 年提出。它結合了選擇排序的思想和二叉堆的特性,具有時間復雜度穩定(O (nlogn))、原地排序&#xff…

I/O 多路復用select,poll

目錄 I/O多路復用的介紹 多進程/多線程模型的弊端 網絡多路復用如何解決問題? 網絡多路復用的常見實現方式 常見的開源網絡庫 select詳細介紹 select函數介紹 套接字可讀事件,可寫事件,異常事件 fd_set類型介紹 select的兩次拷貝,兩次遍歷 se…

最終分配算法【論文材料】

文章目錄一、最終分配算法1.1 平衡的情況1.2 不平衡的情況1.3 TDM 約束一、最終分配算法 上一步合法化后,group 的 TDM 情況大致分為兩類,一類是平衡的,最大的一些 group 的 TDM 比較接近。另外一種情況就是不平衡的,最大的 group…

《大數據技術原理與應用》實驗報告七 熟悉 Spark 初級編程實踐

目 錄 一、實驗目的 二、實驗環境 三、實驗內容與完成情況 3.1 Spark讀取文件系統的數據。 3.2 編寫獨立應用程序實現數據去重。 3.3 編寫獨立應用程序實現求平局值問題。 四、問題和解決方法 五、心得體會 一、實驗目的 1. 掌握使用 Spark 訪問本地文件和 HDFS 文件的…

機器學習漫畫小抄 - 彩圖版

斯坦福機器學習漫畫小抄,中文版來啦! 下載地址: 通過網盤分享的文件:機器學習知識點彩圖版.pdf 鏈接: https://pan.baidu.com/s/1-fH9OpC_u_OrTqWy6gVUCA 提取碼: 246r

1.初始化

業務模塊核心技術棧業務(亮點)解決方案課程安排01 認識Vue3為什么需要學Vue3?Vue3組合式API體驗Vue3更多的優勢2 使用create-vue搭建Vue3項目認識 create-vue使用create-vue創建項目3 熟悉項目目錄和關鍵文件項目目錄和關鍵文件4 組合式API - setup選項…

Milvus分布式數據庫工作職責

主導騰訊云Milvus服務化項目,設計多租戶隔離方案,支撐日均10億向量請求,延遲降低40%。優化IVF_PQ索引構建流程,通過量化編碼壓縮使內存占用減少60%,QPS提升35%。開發基于Kubernetes的Milvus Operator,實現自…

FMEA-CP-PFD三位一體數字化閉環:汽車部件質量管控的速效引擎

FMEA-CP-PFD三位一體數字化閉環:汽車部件質量管控的速效引擎 全星FMEA軟件系統通過??FMEA(失效模式分析)、CP(控制計劃)、PFD(過程流程圖)三大工具的一體化協同管理??,為汽車部件…

VUE2 學習筆記1

目錄 VUE特點 文檔tips 開發者工具 從一個Hello world開始 hello world Demo 容器和實例的對應關系 差值語法{{}} VUE特點 構建用戶界面:可以用來把數據構建成用戶界面。 漸進式:自底向上,可以先從一個非常輕量級的框架開始&#xf…

嵌入式學習系統編程(四)進程

目錄 一、進程 1.程序和進程 2.進程的八種狀態 3. 幾個狀態 4.關于進程常用命令 二、關于進程的函數 1.fork 2.面問 3.孤兒進程 后臺進程 2. exec函數族 (只保留父子關系,做新的事情) strtok函數 三、進程的結束 1.分類 exit和_exit的區別 wait函數…

Linux中添加重定向(Redirection)功能到minishell

前言:在談論添加minishell之前,我再重談一下重定向的具體實現等大概思想!!!方便自己回顧!!! 目錄 一、重定向(Redirection)原理詳解 1、文件描述符基礎 2、…

Django由于數據庫版本原因導致數據庫遷移失敗解決辦法

在django開發中,一般我們初始化一個項目之后,創建應用一般就會生成如下的目錄:django-admin startproject myproject python manage.py startapp blogmyproject/ ├── manage.py └── myproject/ | ├── __init__.py | ├── se…

C++STL系列之vector

前言 vector是變長數組,有點像數據結構中的順序表,它和list也是經常被拿出作對比的, vector使用動態分配數組來存儲它的元素。當新元素插入時候,這個數組需要被重新分配大小,如果擴容,因為要開一個新數組把…

Functional C++ for Fun Profit

Lambda Conf上有人講C函數式編程。在Functional Conf 2019上,就有主題為“Lambdas: The Functional Programming Companion of Modern C”的演講。演講者介紹了現代C中函數式編程相關內容,講解了如何使用Lambda表達式編寫符合函數式編程原則的C代碼&…

Python基礎理論與實踐:從零到爬蟲實戰

引言Python如輕舟,載你探尋數據寶藏!本文從基礎理論(變量、循環、函數、模塊)啟航,結合requests和BeautifulSoup實戰爬取Quotes to Scrape,適合零基礎到進階者。文章聚焦Python基礎(變量、循環、…

ThingJS開發從入門到精通:構建三維物聯網可視化應用的完整指南

文章目錄第一部分:ThingJS基礎入門第一章 ThingJS概述與技術架構1.1 ThingJS平臺簡介1.2 技術架構解析1.3 開發環境配置第二章 基礎概念與核心API2.1 核心對象模型2.2 場景創建與管理2.3 對象操作基礎第三章 基礎開發實戰3.1 第一個ThingJS應用3.2 事件系統詳解3.3 …

關于list

1、什么是listlist是一個帶頭結點的雙向循環鏈表模版容器,可以存放任意類型,需要顯式定義2、list的使用有了前面學習string和vector的基礎,學習和使用list會方便很多,因為大部分的內容依然是高度重合的。與順序表不同,…

Mysql 查看當前事務鎖

在 MySQL 中查看事務鎖(鎖等待、鎖持有等),可以使用以下方法: 一、查看當前鎖等待情況(推薦) SELECTr.trx_id AS waiting_trx_id,r.trx_mysql_thread_id AS waiting_thread,r.trx_query AS waiting_query,b…