在Java中常用的集合类型主要有数组List、元组Tuple、集合Set。在本节中着重介绍相关的使用和部分注意事项。
功能介绍
数组
数组我们说就是一类数据的集合,Python的这一类更加宽泛(其他比如Java语言,Python的数组List几乎可以等于Java中的数组和列表的组合体)
novels = ['西游记','红楼梦','三国演义','水浒传']novels.append(10)print(novels) # ['西游记', '红楼梦', '三国演义', '水浒传', 10]#这种情况在Java的List中是不会存在的一般来说,我们一般也不会这样去使用,还是尽量保证其中内容类型保持一致
元组
元组我们几乎可以这样认为,是一个不可变的数组,即不能对其进行修改
#元组可以认为是一个固定的集合university = ('freshman','sophomore','juinor','senior')print(university[0]) #freshmanuniversity[1]='Uni' #错误
集合
集合我们常用口袋来形容,因为集合内的东西,在口袋里,都是无序的,我们只能知道钥匙在不在口袋里,但是却不知道在口袋的底部还是上部(其实这个比喻也不是特别严谨),因为这个位置就是随时变动的
box = {'basketball','football','ping pong','tennis ball'} #盒子里一共四个球print('football' in box ) #True
使用说明
数组
novels = ['西游记','红楼梦','三国演义','水浒传']novels.append(10) #对数组增加一个值为10的记录print(novels) # ['西游记', '红楼梦', '三国演义', '水浒传', 10]for i in novels: #使用迭代for each来遍历循环数组print(i)#也可以使用range的方式来遍历for i in range(len(novels)):print(novels[i])#for的使用在后续控制流语句章节详细讲述#列表索引novels = ['西游记','红楼梦','三国演义','水浒传']the_journey_to_the_west=novels[0] #访问数组中的第一个值,从0开始计数first = novels[-4] #内容和novels[0]内容相同,对于索引,Python支持负数的索引,对应关系为novels[i]==novels[i-len(novels)],其中i>=0great_novel = novels[1:] #从第二个(索引为1,包括)数值开始到数组最后的全部数据的数组,['红楼梦', '三国演义', '水浒传']middle_novel = novels[1:3]#输出从下标1(包括)到下标3(不包括)的所有数据的数组 ['红楼梦', '三国演义']# 排序#sort用到的默认键方法一群殴,数组中的所有数据项均为可比较的类型,就是说,如果数组中既有数字也有字符串,那么会引发异常x = [1,4,2,6,2]x.sort()print(x) #[1, 2, 2, 4, 6]novels = ['西游记','红楼梦','三国演义','水浒传']novels.sort()print(novels) # ['三国演义', '水浒传', '红楼梦', '西游记']
关于访问下标索引,Python沿用了大部分语言的从0开始的习惯;
元组
为什么在已有列表数组的情况下,再新增一个元组类型呢,因为元组具有列表无法实现的重要作用,如用作字典的值。
除了无法赋值之外,操作和数组一致,不过需要额外注意思考题。
tp = (1,2,3) #元组的声明print(tp[1]) #2#元组的打包和拆包(one,two,*others) = (1,2,3,4,5,6)#将右边的值 (1,2,3,4,5,6)打包为元组,然后元组中将数据再拆包为三部分,第一个元素是one,第二个元素为two,第三个元素为others#其中*代表该元素接受任意数量的未匹配元素,即剩余元素print(one) #1print(two) #2print(others) #[3, 4, 5, 6]
数组和元组的相互转换,直接使用list以及tuple函数即可,list((1,2,3,4,5)),tuple([6,7,8])
集合
集合是一组对象的无序集,集合中的项必须是不可变的、可散列的
values = set([1,2,3,3,5,7])print(values) #{1, 2, 3, 5, 7}values.add(8) #{1, 2, 3, 5, 7, 8}values.remove(5) #{1, 2, 3, 7, 8}print(6 in values)#Falseprint(1 in values) #True
练习题
- 有一个list,[‘a’,’b’,’c’,’e’,’e’,’i’,’o’,’u’],使用切片取出所有的元音字母
- 声明一个list,把每周的七天依次放入list,最后从数组分别取出工作日和休息日(默认周六日休息)
思考题
现在有一个元祖
#使用控制台执行如下代码t = (1,2,3,[1,2,3])t[3]+=[4]#如果做以上的操作,那么系统会怎样#A 报错#B t被正确赋值为 (1,2,3,[1,0,3])#C A和B都对#D 不报错,但是t无法被赋值
