什么是元组?
元组是处理一组有序项目的数据结构
元组和字符串一样是不可变的 , 即你不能修改元组
元组可以包含任何类型的对象:字符串、数字甚至其他列表
适应场景:性别选择,数据库的查询结果
元组通过圆括号中用逗号分割的项目定义
只有一个元素,需要在元素后面加逗号
# 定义空元组
>>> tu1 = ()
>>> type(tu1)
<class 'tuple'>
>>> tu2 = tuple()
>>> tu2
()
>>> tu2 = tuple([1,2,3])
>>> tu2
(1, 2, 3)
>>> dir(tu2)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
>>> tu2.index(3)
2
>>> tu2.count(3)
1
>>> tu3 = (1)
>>> type(tu3)
<class 'int'>
>>> tu3 = (1,)
>>> type(tu3)
<class 'tuple'>
元素里面包列表,列表里的元素是可以改变的。
因为列表是可变数据类型,更改里面的元素不会改变列表本身
>>> tu = ("a",[1,2])
>>> tu[1]
[1, 2]
>>> tu[1].append(3)
>>> tu
('a', [1, 2, 3])
>>> a =(1,2)
>>> a,b = (1,2)
>>> a
1
>>> b
2
切片
切片是通过下标访问元组中的元素,切片可以取出一个子元组
格式:
sample[start:end:step]
起止区间:[ start, end )
step: 默认=> 1
start: 默认=> step为正时,start为0;step为负时, start为-1
end: 默认=> step为正时,end为元组结尾;step为负时, end为元组开始
注意:三个值都为选填项
>>> tu1 = ('apple','b','c',1,1.10,False)
>>> tu1[0:3]
('apple', 'b', 'c')
>>> tu1[0:7:2]
('apple', 'c', 1.1)
>>> tu1[1:]
('b', 'c', 1, 1.1, False)
>>> tu1[::]
('apple', 'b', 'c', 1, 1.1, False)
>>> tu1[-4:-1]
('c', 1, 1.1)
>>> tu1[-1:-4]
()
>>> tu1[-1:-4:-1]
(False, 1.1, 1)
>>> tu1[6:0:-2]
(False, 1, 'b')
>>> tu1[::-1]
(False, 1.1, 1, 'c', 'b', 'apple')
切片函数(slice函数)
用途:生成一个slice对象,相当于可以给要切的内容取个名字
>>> tu1
('apple', 'b', 'c', 1, 1.1, False)
>>> a = slice(0,3)
>>> a
slice(0, 3, None)
>>> type(a)
<class 'slice'>
>>> tu1[a]
('apple', 'b', 'c')
元组的不可变性
>>> tu1
('apple', 'b', 'c', 1, 1.1, False)
>>> tu1[0] = 'a'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
统计
>>> tu1
('apple', 'b', 'c', 1, 1.1, False)
>>> len(tu1)
6
>>> tu1.index('b')
1
>>> tu1.count(1)
1
>>>
遍历元组
>>> tu1
('apple', 'b', 'c', 1, 1.1, False)
>>> for i in enumerate(tu1):
... print(i)
...
(0, 'apple')
(1, 'b')
(2, 'c')
(3, 1)
(4, 1.1)
(5, False)
成员关系
>>> 'a' in tu1
False
>>> 'b' in tu1
True
>>> 'a' not in tu1
True
>>> 'b' not in tu1
False
列表和元组的区别
相同点
序列的两个主要特点是索引操作符和切片操作符
索引操作符让我们可以从序列中抓取一个特定项目。
切片操作符让我们能够获取序列的一个切片,即一部分序列。
不同点
list: 可变对象
tuple: 不可变对象,不能增加修改删除
tuple中嵌套list时,list是可修改的
list和tuple的相互转换
>>> tu1
('apple', 'b', 'c', 1, 1.1, False)
>>> list(tu1)
['apple', 'b', 'c', 1, 1.1, False]
>>> tuple(list(tu1))
('apple', 'b', 'c', 1, 1.1, False)
小练习
print("欢迎使用用户检测系统")
user_lst = [('root', '123456'), ('admin', '123123')]
username = input("请输入用户名:")
passwd = input("请输入密码:")
if username == 'root' and passwd == '123456':
print("success login")
elif username == 'admin' and passwd == '123123':
print("success login")
else:
print("fail login")