您的位置:首页 > 编程语言 > Python开发

【python】特色数据类型——元组(列表、元组、字典、集合)(6)

2018-02-05 21:02 811 查看
参考 Python从零开始系列连载,by 王大伟 Python爱好者社区

参考 Hellobi Live | 1小时破冰入门Python

参考 《简明python教程》

参考 《小甲鱼零基础入门学python》

Note: 更多连载请查看【python】

目录

目录

元组
1 元组的创建

2 元组的索引

3 元组的切片

4 元组的连接

5 元组的复制

6 元组对内部元素的循环

7 查找元组的元素

8 元组的删除

9 元组的最大值、最小值

10 元组的长度

11 元组的元素的不变性

12 元组与列表之间的转换

13 元组与for…in的结合

14 元组有像列表一样的推导式吗?

元组

上了枷锁的列表

一诺千金, 不可改变



元组是Python的另一种特色的数据类型,元组和列表是相似的,可以存储不同类型的数据。但是!划重点:元组是不可改变的创建后就不能做任何修改操作了

下面是列表的一些常用的方法,圈出来部分是元组可以使用的



1 元组的创建

莫莫问:元组和列表最大的区别是什么?

小明:废话,当然是[]和()

其实不是

元组最大的特点是(逗号)

创建一个元组的时候,必须加逗号,不然会认为是整型

tuple1 = 1,#特殊情况:创建一个元素的元组时必须加逗号
print (tuple1)
print (type(tuple1))

tuple2 = (1,)
print (tuple2)
print (type(tuple2))

tuple3 = (1)
print (tuple3)
print (type(tuple3))


结果为

(1,)
<class 'tuple'>
(1,)
<class 'tuple'>
1
<class 'int'>


a = 1,2,3#创建元组,用逗号隔开的就是元组,但是为了美观和代码可读性,我们一般加小括号
print (a)
type(a)


结果为

(1, 2, 3)
tuple


元组支持嵌套

tuple1 = ('a',1,2.33,[1,'a'],(1,3,5),{'a':1})
tuple1#注意:上面的元组包含了列表,所以元组允许嵌套


结果为

('a', 1, 2.33, [1, 'a'], (1, 3, 5), {'a': 1})


创建空元组

tuple1 = ()#创建空元组
tuple1


结果为

()


我们在创建元组的时候,其实是在进行元组打包

tuple1 = 1,2,3,4 #我们在创建元组的时候,其实是在进行元组打包
a,b,c,d = tuple1 #元组解包,将等号右侧的元组中的元素按顺序依次赋值给等号左边的变量
print(a,b,c,d)


结果为

1 2 3 4


要写完整左边的,一 一对应好,否者报错

a,b,c = tuple1 #要写完整左边的,一 一对应好


结果报错

ValueError: too many values to unpack (expected 3)


2 元组的索引

同列表

tuple1 = (0,1,2,3,4,5,6,7,8)
print (tuple1[3]) #索引
print (tuple1[-2]) #索引


结果为

3
7


3 元组的切片

同列表

tuple1 = (0,1,2,3,4,5,6,7,8)
print (tuple1[1:3])  #切片
print (tuple1[5:3:-1]) #切片


结果为

(1, 2)
(5, 4)


4 元组的连接

可以结合切片和连接,对元组进行所谓的添加和删除

同列表

tuple1 = (0,1,2)
tuple2 = (3,4,5)
print (tuple1 + tuple2) #连接


结果为:

(0, 1, 2, 3, 4, 5)


5 元组的复制

同列表

tuple1 = (0,1,2)
tuple1*3 #复制


结果为

(0, 1, 2, 0, 1, 2, 0, 1, 2)


6 元组对内部元素的循环

同列表

tuple1 = (0,1,2)
for i in tuple1: #对内部元素循环
print(i)


结果为

0
1
2


7 查找元组的元素

同列表

tuple1 = (0,1,2)
print (2 in tuple1) #查找元组中是否有某元素
print (3 in tuple1)


结果为

True
False


8 元组的删除

同列表

tuple1 = (0,1,2,3,4,5,6,7,8,9,10)
del tuple1 #删除元组
tuple1


结果报错

NameError: name 'tuple1' is not defined


9 元组的最大值、最小值

同列表

tuple1 = (0,1,2,3,4,5,6,7,8,9,10)
print (max(tuple1))
print (min(tuple1))


结果为

10
0


10 元组的长度

同列表

tuple1 = (0,1,2,3,4,5,6,7,8,9,10)
len(tuple1)#查看元组长度


结果为

11


空元素的元组长度为0

len(())#对空元组执行长度操作,显示长度为0


结果为0

11 元组的元素的不变性

列表中的

• pop()

• append()

• extend()

• remove()

• index()

在元组中都不可用

tuple1 = (1,2,3)
tuple1[0] = 2 #元组元素不能修改


结果报错

TypeError: 'tuple' object does not support item assignment


12 元组与列表之间的转换

list()和tuple()



13 元组与for…in的结合

[(m,n) for m in 'abcd' for n in'abcd']


结果为

[('a', 'a'),
('a', 'b'),
('a', 'c'),
('a', 'd'),
('b', 'a'),
('b', 'b'),
('b', 'c'),
('b', 'd'),
('c', 'a'),
('c', 'b'),
('c', 'c'),
('c', 'd'),
('d', 'a'),
('d', 'b'),
('d', 'c'),
('d', 'd')]


如果要删去相同的元素,可以在最后加一个约束条件

[(m,n) for m in 'abcd' for n in'abcd' if m != n] #如果字符串里有重复的字符,而我们要找不同的字符的排列组合,加条件判断!


结果为

[('a', 'b'),
('a', 'c'),
('a', 'd'),
('b', 'a'),
('b', 'c'),
('b', 'd'),
('c', 'a'),
('c', 'b'),
('c', 'd'),
('d', 'a'),
('d', 'b'),
('d', 'c')]


下面看看一般的方法

#一般方法
list1 = []
for i in 'abcd':
for j in 'abcd':
if i != j:
list1.append((i,j))
list1


结果同上

那么问题来了

小莫:元组操作方法比列表少?为啥还要学这个!感觉没啥优势!

小苏:小莫啊!元组在某些方面有优势的:

元组的运算速度比列表快,如果你经常要遍历一个序列,且不需要修改内容,用元组比列表好

元组相当于给数据加了保护(不可修改),有些场合需要这种不可修改的内容,想想我们生活中的很多通知说明等pdf文件不就是只读不可写么,能理解了吧。

小莫:震惊!元组在这种情况下竟然能将劣势转为优势

14 元组有像列表一样的推导式吗?

把列表推导式中的[]换成()试试

tuple1 = (i**2 for i in range(10))
type(tmp)


结果为

generator


是生成器,amazing

访问一下下

for j in range (10):
print (tuple1.__next__())


结果像挤牙膏一样,一点一点出来

0
1
4
9
16
25
36
49
64
81


Note: 更多连载请查看【python】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐