前面学了列表和字典,今天我们看一个和列表相似的类型元组。再总结一个集合类型。

预习:

  1. 1、简单购物车
  2.   实现打印商品详细信息,用户输入商品名和购买个数,则将商品名,价格,购买个数加入购物列表,如果输入为空或其他非法输入则要求用户重新输入  
  3. msg_dic={
  4. 'apple':10,
  5. 'tesla':100000,
  6. 'mac':3000,
  7. 'lenovo':30000,
  8. 'chicken':10,
  9. }
  10. 2、有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
  11. pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
  12. linuxs={'wupeiqi','oldboy','gangdan'}
  13. 1. 求出即报名python又报名linux课程的学员名字集合
  14. 2. 求出所有报名的学生名字集合
  15. 3. 求出只报名python课程的学员名字
  16. 4. 求出没有同时这两门课程的学员名字集合
  17. 3
  18. 1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序
  19. 2.在上题的基础上,保存列表原来的顺序
  20. 3.去除文件中重复的行,肯定要保持文件内容的顺序不变
  21. 4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序
  22. l=[
  23. {'name':'egon','age':18,'sex':'male'},
  24. {'name':'alex','age':73,'sex':'male'},
  25. {'name':'egon','age':20,'sex':'female'},
  26. {'name':'egon','age':18,'sex':'male'},
  27. {'name':'egon','age':18,'sex':'male'},
  28. ]

本篇导航:

一、元组(tuple)

为何要有元组?===>存多个值,对比列表来说,元组不可变,主要是用来读

定义:与列表类型相似,只不过[]换成(),元组是不可变类型所以可以当做字典的key

  1. t=(1,[1,3],'sss',(1,2)) #t=tuple((1,[1,3],'sss',(1,2)))
  2. print(type(t))

元组所以可以当做字典的key

  1. #元组可以作为字典的key
  2. d={(1,2,3):'egon'}
  3. print(d,type(d),d[(1,2,3)])

常用方法:

  1. #为何要有元组,存放多个值,元组不可变,更多的是用来做查询
  2. t=(1,[1,3],'sss',(1,2)) #t=tuple((1,[1,3],'sss',(1,2)))
  3. print(type(t))
  4.  
  5. #元组可以作为字典的key
  6. d={(1,2,3):'egon'}
  7. print(d,type(d),d[(1,2,3)])
  8.  
  9. # 索引
  10. goods=('iphone','lenovo','sanxing','suoyi')
  11. print(goods.index('iphone'))
  12. print(goods.count('iphone')) #统计
  13.  
  14. #切片
  15. goods=('iphone','lenovo','sanxing','suoyi')
  16. print(goods[1:3])
  17.  
  18. # 长度
  19. print(len(goods))
  20.  
  21. #in:
  22. goods=('iphone','lenovo','sanxing','suoyi')
  23. print('iphone' in goods)
  24.  
  25. #补充:元组本身是不可变的,但是内部的元素可以是可变类型
  26. t=(1,['a','b'],'sss',(1,2)) #t=tuple((1,[1,3],'sss',(1,2)))
  27. t[1][0]='A'
  28. print(t)
  29. # t[1]='aaaaaaaaaaaa' #报错

补充:元组本身是不可变的,但是内部的元素可以是可变类型

  1. t=(1,['a','b'],'sss',(1,2)) #t=tuple((1,[1,3],'sss',(1,2)))
  2. t[1][0]='A'
  3. print(t)
  4. # t[1]='aaaaaaaaaaaa' #报错

二、集合(set)

集合:可以包含多个元素,用逗号分割

作用:去重,关系运算

集合的元素遵循三个原则:

1、集合是可变类型但每个元素必须是不可变类型

2、没有重复的元素

3、无序

注意:集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值

  1. s={1,2,2,'eaaa',(1,2,3)} #s=set({1, 2, (1, 2, 3), 'eaaa'})
  2. print(s,type(s))

重点及方法:

  1. # in 和 not in
  2. pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
  3. print('egon' in pythons)
  4.  
  5. pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
  6. linuxs={'wupeiqi','oldboy','gangdan'}
  7. # | 并集:所有报名的学生名字集合
  8. s=pythons | linuxs
  9. print(s)
  10. print(pythons.union(linuxs))
  11.  
  12. # & 交集:求二者共同的部分:求即报名python又报名linux的学生
  13. s=pythons & linuxs
  14. print(s)
  15. print(pythons.intersection(linuxs))
  16.  
  17. # - 差集:求只报名python,没有报名linux的学生
  18. print(pythons - linuxs)
  19. print(pythons.difference(linuxs))
  20.  
  21. # ^ 对称差集: 没有同时报名python和linux课程的学生名字集合
  22. print(pythons ^ linuxs)
  23. print(pythons.symmetric_difference(linuxs))
  24.  
  25. # ==
  26. set1={1,2,3}
  27. set2={1,2,3}
  28. print(set1 == set2)
  29.  
  30. # >,>= ,<,<= 父集,子集
  31.  
  32. set1={1,2,3,4,5}
  33. set2={1,2,3,4}
  34. print(set1 >= set2)
  35. print(set1.issuperset(set2))
  36.  
  37. print(set2 <= set1)
  38. print(set2.issubset(set1))
  39. #以上的运算中符号和方法的作用相同可以根据自己的理解记忆一种即可
  40.  
  41. linuxs={'wupeiqi','oldboy','gangdan'}
  42. linuxs.add('asb') #set类型的集合是可变类型
  43. # linuxs.add([1,2,3]) #报错,只能添加不可变类型
  44. print(linuxs)
  45.  
  46. res=linuxs.pop() #不用指定参数,随机删除,并且会有返回值
  47. print(res)
  48.  
  49. res=linuxs.remove('oldboy') #指定元素删除,元素不存在则报错,单纯的删除,没有返回值,
  50. # # print(linuxs)
  51. # print(res)
  52. #
  53. # res= linuxs.discard('oldboy1111111') #指定元素删除,元素不存在不报错,单纯的删除,没有返回值,
  54. print(linuxs)
  55. print(res)
  56.  
  57. #以下方法可做了解
  58. #update() 更新
  59. linuxs={'wupeiqi','oldboy','gangdan'}
  60. new_set={'wupeiqi','alex_SB'}
  61. # linuxs.update(new_set)
  62. # print(linuxs)
  63.  
  64. # new_set.update(linuxs)
  65. # print(new_set)
  66.  
  67. #清除
  68. # linuxs.clear()
  69. #复制
  70. # linuxs.copy()

三、赋值

  1. x=10
  2.  
  3. #链式赋值
  4. # a=b=c=d=e=f=10
  5. # print(a,b,c,d,e,f)
  6.  
  7. #增量赋值
  8. x=10
  9. y='a'
  10. # temp=x
  11. # x=y
  12. # y=temp
  13. # print(x,y)
  14.  
  15. # x,y=y,x
  16. # print(x,y)
  17.  
  18. #值的解压
  19. msg='hello'
  20. l=[1,2,3]
  21.  
  22. # a,b,c,d,e=msg
  23. # print(a,b,c,d,e)
  24.  
  25. # a,_,_,_,e=msg
  26. # a,*_,e=msg
  27. # print(a)
  28. # print(e)
  29.  
  30. # dic={'a':1,'b':2,'c':3}
  31. # x,y,z=dic
  32. # print(x,y,z)

预习解答:

  1. '''
  2. 实现打印商品详细信息,用户输入商品名和购买个数,则将商品名,价格,购买个数加入购物列表,
  3. 如果输入为空或其他非法输入则要求用户重新输入
  4. msg_dic={
  5. 'apple':10,
  6. 'tesla':100000,
  7. 'mac':3000,
  8. 'lenovo':30000,
  9. 'chicken':10,
  10. }
  11. '''
  12.  
  13. msg_dic = {'apple':10,'tesla':100000,'mac':3000,'lenovo':30000,'chicken':10,}
  14. shop_card = []
  15. while True:
  16. for k in msg_dic:
  17. print('name:{} price:{}'.format(k,msg_dic[k]))
  18.  
  19. goods=input('商品名: ').strip()
  20. if len(goods) == 0 :
  21. print("没有输入商品名称!")
  22. continue
  23. if not goods in msg_dic : #等同goods not in msg_dis
  24. print("本商城没有此商品!")
  25. continue
  26.  
  27. while True :
  28. num = input('购买个数: ').strip()
  29. if len(num) == 0 :
  30. print("没有输入商品数量!")
  31. continue
  32. if not num.isdigit() :
  33. print("商品数量格式输入有误!")
  34. continue
  35. break
  36.  
  37. shop_card.append((goods,msg_dic[goods],int(num)))
  38. print(shop_card)
  39.  
  40. # 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
  41. # pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
  42. # linuxs={'wupeiqi','oldboy','gangdan'}
  43. pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
  44. linuxs={'wupeiqi','oldboy','gangdan'}
  45. # 1. 求出即报名python又报名linux课程的学员名字集合
  46. print(pythons & linuxs)
  47. # 2. 求出所有报名的学生名字集合
  48. print(pythons | linuxs)
  49. # 3. 求出只报名python课程的学员名字
  50. print(pythons - linuxs)
  51. # 4. 求出没有同时这两门课程的学员名字集合
  52. print(pythons ^ linuxs)
  53.  
  54. # 1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序
  55. l=['a','b',1,'a','a']
  56. print(set(l))
  57. # 2.在上题的基础上,保存列表原来的顺序
  58. l1=[]
  59. for i in l:
  60. if i not in l1:
  61. l1.append(i)
  62. print(l1)
  63.  
  64. # 4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序
  65. l=[
  66. {'name':'egon','age':18,'sex':'male'},
  67. {'name':'alex','age':73,'sex':'male'},
  68. {'name':'egon','age':20,'sex':'female'},
  69. {'name':'egon','age':18,'sex':'male'},
  70. {'name':'egon','age':18,'sex':'male'},
  71. ]
  72. l1=[]
  73. for item in l:
  74. if item not in l1:
  75. l1.append(item)
  76. print(l1)

小知识点:

in:字符串,列表,元组,字典,集合

for:字符串,列表,元组,字典,集合

解压:字符串,列表,元组,字典,集合

python基础(7):元祖类型(赋值补充)的更多相关文章

  1. Python基础入门-元祖

    其实,元组合列表的特性和使用几乎差不太多,今天我们重点来看下元组的一些操作和使用. 1.元祖的定义和特点 定义:元组是以小括号包围,元素以逗号分隔,不可变的序列之一. 特点: 1)元祖内的元素不可以增 ...

  2. python基础之元祖、嵌套,for循环、 enumerate、range的试用案例

    元祖又叫做只读列表,可循环查询.可切片,元祖里的直接元素不能更改,但是若里面有嵌套的列表,则可以修改列表里的元素 tu = (1,2,3,'sun',[3,4,5,'cat']) tu[4][3] = ...

  3. python基础之元祖tuple

    元祖是只读列表,不可哈希,可循环查询,可切片*儿子不能改,孙子可更改--元祖里面单个元素不能更改---元祖内列表可更改增:tu1+tu2查:tu1[index] tu1[start_index:end ...

  4. python基础--4 元祖

    #元组,元素不可被修改,不能被增加或者删除 #tuple,有序 tu=(11,22,33,44,55,33) #count 获取指定元素在元祖中出现的次数 print(tu.count(33)) #i ...

  5. Python基础笔记-元祖

    Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. def main(): tup2 = ...

  6. day007 列表类型、元祖类型、 字典类型、 集合类型的内置方法

    目录 列表数据类型的内置方法 作用 定义方式 优先掌握的方法 需要掌握的方法 元祖类型的内置方法 作用 定义方式 优先掌握的方法(参考列表方法) 字典类型的内置方法 作用 定义方式 优先掌握的方法 需 ...

  7. python基础——使用元类

    python基础——使用元类 type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Hello的class,就写一个hello. ...

  8. PYTHON-基本数据类型-元祖类型,字典类型,集合类型

    内容: 1. 元组 2. 字典 3. 集合=========================== 元祖类型什么是元组: 元组就是一个不可变的列表============================ ...

  9. Python中的元祖Tuple

    Python中的元祖和list基本上一样 tuple = () # 表示一个空的元祖 tuple = (50, ) # 元组中只有一个元素的时候,必须在后面加上逗号 无关闭分隔符 任意无符号的对象,以 ...

  10. Python基础-python数据类型之元祖、字典(四)

    元祖 Python的元组与列表类似,不同之处在于元组的元素不能修改.元组使用小括号,列表使用方括号. tuple=(1,2,3,4) print(tuple) 访问元祖 通过索引访问,也可以进行切片操 ...

随机推荐

  1. 网络编程应用:基于TCP协议【实现一个聊天程序】

    要求: 基于TCP协议实现一个聊天程序,客户端发送一条数据,服务器端发送一条数据 客户端代码: package Homework1; import java.io.IOException; impor ...

  2. JavaScript面向对象轻松入门之抽象(demo by ES5、ES6、TypeScript)

    抽象的概念 狭义的抽象,也就是代码里的抽象,就是把一些相关联的业务逻辑分离成属性和方法(行为),这些属性和方法就可以构成一个对象. 这种抽象是为了把难以理解的代码归纳成与现实世界关联的概念,比如小狗这 ...

  3. oracle日志挖掘

    oracle日志挖掘是一种十分强大的数据恢复技术,只要你保障你的归档日志和重做日志是完整的,那么就可以将你的数据恢复到任何时刻.简单叙述一下日志挖掘的基本原理,然后进行一个简单的小实验. 日志挖掘时基 ...

  4. WPF MVVM 架构 Step By Step(4)(添加bindings - 完全去掉后台代码)

    之前的改进已经挺棒的,但是我们现在知道了后台代码的问题,那是否可能把后台代码全部去除呢?这时候就该WPF binding 和 commands 来做的事情了. WPF就是以超吊的binding,com ...

  5. python 标准库 -- shutil

    shutil shutil.move(src,dst) shutil.move('/tmp/20170223/new','/tmp/20170223/test') # 移动文件, 重命名等 shuti ...

  6. PHP中常量和变量的区别

    1.常量只能赋一次值: 以下是申请常量的两种方法: const THE_VALUE="one"; define("THE_VALUE","one&qu ...

  7. openfire极限优化

    日志优化   默认是 用info 级别,最好不用openfire原生的打日志方式.   离线消息用存储不打回方式,不要用打回方式   xmpp.offline.type=store_and_drop ...

  8. ⑨的完美冻青蛙(frog)

    ⑨的完美冻青蛙(frog) 时间限制: 1 Sec  内存限制: 128 MB 题目描述 输入 第一行是一个正整数n,表示上式中的p的个数.   接下来有n行,每一行两个正整数pi 和ei . 输出 ...

  9. 【PHP】最详细PHP从入门到精通(四)——PHP中的字符串

     PHP从入门到精通 之PHP中的字符串 大家好,继续跟进PHP最详尽的知识更新,本周,跟大家重点讲一下PHP中字符串的使用.在PHP中,字符串是非常重要的一个概念,基本上大家想到的字符串的处理功能, ...

  10. 神奇的 conic-gradient 圆锥渐变

    感谢 LeaVerou 大神,让我们可以提前使用上这么美妙的属性. conic-gradient 是个什么?说到 conic-gradient ,就不得不提的它的另外两个兄弟: linear-grad ...