[TOC]
----
# Python基础-元组
## 什么是元组:
元组的使用与列表类似.
不同之处:
1. 不能修改
2. 不能追加
2. 不能删除
3. 不能反转
4. 元组使用小括号
5. 列表使用方括号。
相同之处:
1. 元素都是有序的
2. 可以重复的
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
从上面的简单比较似乎可以认为,tuple就是一个融合了部分list和部分str属性的杂交产物。此言有理。
## 定义元组:
1. 使用逗号的方法:
```python
aTuple = 1,2,3 #这样就定义好了一个元组
print(aTuple) #打印:(1, 2, 3)
t = 1,"23",[123,"abc"],("python","learn") #元素多样性,近list
print(t) #(1, '23', [123, 'abc'], ('python', 'learn'))
```
2. 使用圆括号的方法:
```python
aTuple = (1,2,3)
print(aTuple) #打印:(1, 2, 3)
aTuple = ('a','b','c','d')
print(aTuple) #打印:('a', 'b', 'c', 'd')
```
3. 使用tuple函数(将列表转为元组):
```python
aTuple = [1,2,3]
aTuple = tuple(aTuple)
print(aTuple) #打印:(1, 2, 3)
```
4. 定义只有一个元素的元组:
```python
aTuple = 12, # 这样就定义号了只有一个元素的元组
bTuple = (12,) #必须要再后面加一个逗号,否则就是一个普通的值了
print(aTuple) #打印:(12,)
print(bTuple) #打印:(12,)
```
## 元组常用操作:
1. 下标操作:
```python
aTuple = ('a','b','c')
a = aTuple[0]
print(a) # a
```
2. 切片操作:跟列表和字符串的切片操作一样。
```python
aTuple = ('zhiliao',18,'长沙')
print(aTuple[0]) #zhiliao
print(aTuple[0:2]) #('zhiliao', 18)
print(aTuple[::-1]) #('长沙', 18, 'zhiliao') 反向取值
```
3. 解组操作:
```python
aTuple = ('zhiliao',18)
name,age = aTuple
print(name,age) #'zhiliao',18
```
或者有些时候我们只想要元组中的某个值,不需要所有的值,那么我们可以通过_来作为省略:
```python
aTuple = ('zhiliao',18,'长沙')
#解包时变量的数量要对上
username1,age2,_ = aTuple
print(username1,age2) #zhiliao 18
username,_,_ = aTuple
print(username) #zhiliao
_,age3,_ = aTuple
print(age3) #18
```
4. count方法:获取元组中某个值出现的次数,跟列表中的用法相同。
```python
aTuple = ('zhiliao','zhiliao','zhiliao',18,'长沙')
#count 统计元素出现的次数
print(aTuple.count('zhiliao')) # 3
```
5. index方法:获取元组中某个值的下标,跟列表中的用法相同。
```python
aTuple = ('zhiliao','zhiliao','zhiliao',18,'长沙')
#index 元素第一次出现的位置
print(aTuple.index('zhiliao')) # 0
```
## 元组存在的意义或应用场景:
* 元组在字典中可以当作key来使用,而列表是不可以的。
* 在函数中,有时候要返回多个值,一般采用元组的方式。
```python
def person():
name = 'zhiliao'
age = 18
return name,age
a_tuple = person()
name,age = person()
print(a_tuple) #('zhiliao', 18)
print(name,age) #zhiliao 18
```
```python
def per():
return 'zhiliao',18,'python'
a_tuple = per()
name,age,py = per()
name,age,_ = per()
print(a_tuple) #('zhiliao', 18)
print(name,age,py) #zhiliao 18 python
print(name,age) #zhiliao 18
```
* 在一些不希望用户修改值的场景下使用元组来代替列表。
手册:
<a href="https://www.runoob.com/python3/python3-tuple.html" target="_blank
">https://www.runoob.com/python3/python3-tuple.html</a>
