在Java中常用的集合类型主要有数组List、元组Tuple、集合Set。在本节中着重介绍相关的使用和部分注意事项。

功能介绍

数组

数组我们说就是一类数据的集合,Python的这一类更加宽泛(其他比如Java语言,Python的数组List几乎可以等于Java中的数组和列表的组合体)

  1. novels = ['西游记','红楼梦','三国演义','水浒传']
  2. novels.append(10)
  3. print(novels) # ['西游记', '红楼梦', '三国演义', '水浒传', 10]
  4. #这种情况在Java的List中是不会存在的一般来说,我们一般也不会这样去使用,还是尽量保证其中内容类型保持一致

元组

元组我们几乎可以这样认为,是一个不可变的数组,即不能对其进行修改

  1. #元组可以认为是一个固定的集合
  2. university = ('freshman','sophomore','juinor','senior')
  3. print(university[0]) #freshman
  4. university[1]='Uni' #错误

集合

集合我们常用口袋来形容,因为集合内的东西,在口袋里,都是无序的,我们只能知道钥匙在不在口袋里,但是却不知道在口袋的底部还是上部(其实这个比喻也不是特别严谨),因为这个位置就是随时变动的

  1. box = {'basketball','football','ping pong','tennis ball'} #盒子里一共四个球
  2. print('football' in box ) #True

使用说明

数组

  1. novels = ['西游记','红楼梦','三国演义','水浒传']
  2. novels.append(10) #对数组增加一个值为10的记录
  3. print(novels) # ['西游记', '红楼梦', '三国演义', '水浒传', 10]
  4. for i in novels: #使用迭代for each来遍历循环数组
  5. print(i)
  6. #也可以使用range的方式来遍历
  7. for i in range(len(novels)):
  8. print(novels[i])
  9. #for的使用在后续控制流语句章节详细讲述
  10. #列表索引
  11. novels = ['西游记','红楼梦','三国演义','水浒传']
  12. the_journey_to_the_west=novels[0] #访问数组中的第一个值,从0开始计数
  13. first = novels[-4] #内容和novels[0]内容相同,对于索引,Python支持负数的索引,对应关系为novels[i]==novels[i-len(novels)],其中i>=0
  14. great_novel = novels[1:] #从第二个(索引为1,包括)数值开始到数组最后的全部数据的数组,['红楼梦', '三国演义', '水浒传']
  15. middle_novel = novels[1:3]#输出从下标1(包括)到下标3(不包括)的所有数据的数组 ['红楼梦', '三国演义']
  16. # 排序
  17. #sort用到的默认键方法一群殴,数组中的所有数据项均为可比较的类型,就是说,如果数组中既有数字也有字符串,那么会引发异常
  18. x = [1,4,2,6,2]
  19. x.sort()
  20. print(x) #[1, 2, 2, 4, 6]
  21. novels = ['西游记','红楼梦','三国演义','水浒传']
  22. novels.sort()
  23. print(novels) # ['三国演义', '水浒传', '红楼梦', '西游记']

关于访问下标索引,Python沿用了大部分语言的从0开始的习惯;

元组

为什么在已有列表数组的情况下,再新增一个元组类型呢,因为元组具有列表无法实现的重要作用,如用作字典的值。
除了无法赋值之外,操作和数组一致,不过需要额外注意思考题。

  1. tp = (1,2,3) #元组的声明
  2. print(tp[1]) #2
  3. #元组的打包和拆包
  4. (one,two,*others) = (1,2,3,4,5,6)
  5. #将右边的值 (1,2,3,4,5,6)打包为元组,然后元组中将数据再拆包为三部分,第一个元素是one,第二个元素为two,第三个元素为others
  6. #其中*代表该元素接受任意数量的未匹配元素,即剩余元素
  7. print(one) #1
  8. print(two) #2
  9. print(others) #[3, 4, 5, 6]

数组和元组的相互转换,直接使用list以及tuple函数即可,list((1,2,3,4,5)),tuple([6,7,8])

集合

集合是一组对象的无序集,集合中的项必须是不可变的、可散列的

  1. values = set([1,2,3,3,5,7])
  2. print(values) #{1, 2, 3, 5, 7}
  3. values.add(8) #{1, 2, 3, 5, 7, 8}
  4. values.remove(5) #{1, 2, 3, 7, 8}
  5. print(6 in values)#False
  6. print(1 in values) #True

练习题

  • 有一个list,[‘a’,’b’,’c’,’e’,’e’,’i’,’o’,’u’],使用切片取出所有的元音字母
  • 声明一个list,把每周的七天依次放入list,最后从数组分别取出工作日和休息日(默认周六日休息)

    思考题

    现在有一个元祖
  1. #使用控制台执行如下代码
  2. t = (1,2,3,[1,2,3])
  3. t[3]+=[4]
  4. #如果做以上的操作,那么系统会怎样
  5. #A 报错
  6. #B t被正确赋值为 (1,2,3,[1,0,3])
  7. #C A和B都对
  8. #D 不报错,但是t无法被赋值