Python-用list tuple if dict set
list
list是一种有序的***,可以随时添加和删除其中的元素。跟java不一样的是 可以使用arr[-1] 0>-x >=- len(arr) 索引的数字为 0~ len(arr)-1 -len(arr)~ -1 超过会报错
classmates= ['A','B','C','D','E'] print(classmates) print(len(classmates)) for i in classmates: print(i) ''' ['A', 'B', 'C', 'D', 'E'] 5 A B C D E ''' for i in range(0,len(classmates)): print(classmates[i]) ''' A B C D E ''' classmates= ['A','B','C','D','E'] print(classmates[-1]) print(classmates[-2]) print(classmates[-3]) print(classmates[-4]) print(classmates[-5]) ''' print(classmates[-6]) IndexError: list index out of range ''' ''' E D C B A '''
- list是一个可变的有序表,所以,可以往list中追加元素到末尾: append()方法
- 在某个位置上插入
insert(x,'???') - 要删除list末尾的元素
pop(i) 没有参数默认为最后一个
classmates= ['A','B','C','D','E'] classmates.append('F') classmates.insert(1,'G') classmates.insert(-1,'H') classmates.insert(1,'I') print(classmates) for i in range(0,len(classmates)): classmates.pop(0) print(classmates) ''' ['A', 'I', 'G', 'B', 'C', 'D', 'E', 'H', 'F'] ['I', 'G', 'B', 'C', 'D', 'E', 'H', 'F'] ['G', 'B', 'C', 'D', 'E', 'H', 'F'] ['B', 'C', 'D', 'E', 'H', 'F'] ['C', 'D', 'E', 'H', 'F'] ['D', 'E', 'H', 'F'] ['E', 'H', 'F'] ['H', 'F'] ['F'] [] '''
- 要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:更改值任意属性
classmates= ['A','B','C','D','E'] classmates[0] ='F' print(classmates) ''' ['F', 'B', 'C', 'D', 'E'] '''
- list元素也可以是另一个list,list里面的元素的数据类型也可以不同
p = [1,2,3] classmates= ['A',p,True ] print(classmates)
tuple
tuple和list非常类似,但是tuple一旦初始化就不能修改,更具有安全性 相比list 没有append() pop() insert()等方法
classmates = ('Michael', 'Bob', 'Tracy') 跟list 区别是括号 [] / ()
注意:因为定义tuple 类型跟 四则运算的() 相互混了
false_t = (1) # 定义的不是tuple,是1这个数! print(false_t) true_t = (1,) # 只有1个元素的tuple定义时必须加一个逗号,,来消除歧义: print(true_t) true_t1 = () print(true_t1) ''' 1 (1,) () '''
虽然说tuple不可变 如下
p = ['男',20] change_t = (1,'czncai',p) print(change_t) p[0] = '***' p[1] = 21 print(change_t) ''' (1, 'czncai', ['男', 20]) (1, 'czncai', ['***', 21]) '''
条件判断 + input()
input('请输入一个数字')
if boolean表达式 :
elif :
else :
循环
- for x in list :
是把list每个元素代入变量x,然后执行缩进块的语句 - for x in range() range()函数,可以生成一个整数序列
list(range(5))
[0, 1, 2, 3, 4] - while boolean表达式 :
n = n+1
b = true
break continue
- break 可以提前退出循环
- continue 跳过当前的这次循环,直接开始下一次循环。
使用dict和set
- dict 字典 查找速度大于list
先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字。无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。
dict:给定一个名字,比如'Michael',dict在内部就可以直接计算出Michael对应的存放成绩的“页码”,也就是95这个数字存放的内存地址,直接取出来,所以速度非常快。
mathsorce = {'A': 85, 'V': 70 ,'S': 100} print(mathsorce['A']) # 要先定义初始化 不能直接 d['cznczai'] = ? d ={} d['cznczai'] = 83 d['cgc'] = 90 print(d) {'cznczai': 83, 'cgc': 90} # 通过in判断key是否存在: print('cznczai' in d) print('codeccc' in d) True False #或者 d.get('cznczai' , -1) #如果不存在返回-1 默认为None #通过pop(key)删除对应的值 d.pop('cznczai')
set
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。试试把list放入set,看看是否会报错。(set和dict类似,也是一组key的***,但不存储value。由于key不能重复,所以,在set中,没有重复的key。)
#输出显示的顺序也不表示set是有序的。 d = set([1,2,3]) print(d) #{1 ,2 ,3} #重复元素在set中自动被过滤: d = set([1,2,2,3,4,4,5,5]) print(d) #{1, 2, 3, 4, 5} #通过add(key)方法可以添加元素到set中 d.add(6) print(d) #{1, 2, 3, 4, 5, 6} #通过remove(key)方法可以删除元素: d.remove(1) print(d) #{2, 3, 4, 5, 6} #set可以看成数学意义上的无序和无重复元素的***,因此,两个set可以做数学意义上的交集、并集等操作:& |
再议不可变对象
对于可变对象,比如list,对list进行操作,list内部的内容是会变化的,
ls = [4 ,5,6,1,2,7,3] ls.sort() print(ls) # [1, 2, 3, 4, 5, 6, 7]
对于不可变对象,比如str,
a = 'abc' a.replace('a','A') print(a) # abc
小结
使用key-value存储结构的dict在Python中非常有用,选择不可变对象作为key很重要,最常用的key是字符串。
tuple虽然是不变对象,但试试把(1, 2, 3)和(1, [2, 3])放入dict或set中,并解释结果。