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中,并解释结果。