数组、多维数组
数组声明:
stus = ["曾若天","吴康飞","刘慧杰" ]
新增:
stus.append("candy")
stus.append("李雪松")
stus.insert(0,"赵莹莹")
stus.insert(2,"李兴培")
insert中,0是在数组中的索引位置,“”添加的内容
修改:
把stus“111”修改为邓金娇
stus[2] ="python"
# stu = "111"
# if stu in stus:
# index = stus.index(stu) #如果查找不存在元素,会报错
# stus[index] = "邓金娇"
# print(stus)
删除:
stus.append("candy")
print(stus)
# stus.pop() #删除末尾的元素
# stus.pop(0)#删除指定下标的
# stus.remove("candy")#删除指定的元素,只删除第一个
# del stus[0]
查找:
nums = [82,23,235,236,121,1,0,3,25,26]
stus.count("candy") #查找元素出现的次数
nums.sort()#排序,默认是升序
nums.sort(reverse=True)#排序,默认是升序,会改变原来list的值
# nums.reverse()#反转list,会改变原来list的值
# stus.clear()#清空list
stus.extend(nums)#把另外一个list里面的元素都加入到一个list里面
多维数组:
l = [1,2,3,4,5,6,[7,8,9,10,11]]#2维数组
l2 = [1,2,3,4,5,6,
[7,8,9,10,11,["zengruotian",'abc']
]
]#3维数组
print(l[-1][3]) 数组下标从0开始,-1是指数组的最后一位
print(l2[-1][-1][0])
切片
切片用来拆分读取数组的数据,切片并不会改变正在操作的列表,切片返回的是其子列表,返回的是一个新的栈的拷贝副本。
切片的索引有非常有用的默认值;省略的第一个索引默认为零,省略的第二个索引默认为切片的索引的大小,如果是字符串,则为字符串大小。
#切片就是list范围取值的一种方式
#顾头不顾尾
# li = list(range(1,10))
# print(li)
# print(li[0:3]) #0:3
# print(li[:3]) #0:3
# print(li[1:3]) #0:3
# print(li[:]) #0:3
# print(li[0:11:2]) #开始:结束的索引:步长(隔几个取一次)
# print(li[-1:-5:-1])#负的是从右向左取值,这时候步长应该也要是负的,不然取不到数值
# print(li[::-1])
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> # 替换某些值
>>> letters[2:5] = ['C', 'D', 'E']
>>> letters
['a', 'b', 'C', 'D', 'E', 'f', 'g']
>>> # 现在移除他们
>>> letters[2:5] = []
>>> letters
['a', 'b', 'f', 'g']
>>> # 通过替换所有元素为空列表来清空这个列表
>>> letters[:] = []>>> letters
[]
字典、字典嵌套
字典是无序的键值对(key:value)集合,同一个字典内的键必须是互不相同的。一对大括号 {} 创建一个空字典。
创建:
student_info = {
"addr":"北京",
"name":"曾若天",
"age":18,
"high":180,
"tizhong":150,
}
新增:
# student_info["age"] = 19
# student_info["money"] = 300000
许多时候我们需要往字典中的元素添加数据,我们首先要判断这个元素是否存在,不存在则创建一个默认值。如果在循环里执行这个操作,每次迭代都需要判断一次,降低程序性能。
我们可以使用 dict.setdefault(key, default) 更有效率的完成这个事情。
>>> data = {}
>>> data.setdefault('names', []).append('Ruby')
# student_info.setdefault("car","bmw")
#如果是已经存在的key,setdefault不会修改已有的值
修改:
student_info["age"] =19
取值:
# print(student_info["name"])
# print(student_info["age"])
# print(student_info.get("addr"))
# print(student_info.get("tizhong"))
删除:
# student_info.pop("age")
# del student_info["age"]
# student_info.popitem() #删除最后一个元素
其他的方法:
# student_info.clear() #清空
# d = {"phone":110}
# student_info.update(d) #合并两个字典
# print("name" in student_info.keys())
# print("name" in student_info)#直接用in判断的话,就判断这个key是否存在
#student_info.has_key("name")#python2里面有,python3里面没有
# print(student_info)
# for key in student_info:#直接循环字典,每次取的是字典的key,比较高效的方式
# value = student_info[key]
# value2 = student_info.get(key)
# print("%s -> %s" %(key,value))
# print("%s -> %s" %(key,value2))
#
字典嵌套
元组
元组是由数个逗号分割的值组成。
#tuple
l = [1,2,3]
t = (1,2,3)
print(t[0])
元组是不可变类型,这意味着你不能在元组内删除或添加或编辑任何值。如果你尝试这些操作,将会出错
>>> a = (1, 2, 3, 4)
>>> del a[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
通过内建函数 type() 你可以知道任意变量的数据类型。
>>> type(len)
<class'builtin_function_or_method'>
集合:
#set 集合天生可以去重,集合是无序的
s = {1,2,3,3,4,4,5,6,6}
s1 = {1,2,3,5}
集合数组互转
# print(list(set(l)))
# s.add(5)#添加元素
# s.update({7,8,9})
集合add、update的区别
1、从可添加的元素来说,add只可添加不可变的元素,如数字,元组,字符串,否则会报错,而update()可以添加字符串、列表、元组、字典等可迭代的元素,若添加数字类型,也会报错。
2、从添加的结果来看,add是把元素整体性的添加进去,update()会把元素拆分之后再添加进去
s2 = {7,8}
s2.add('123')#添加元素
s2.update('123')
print(s2)
s.pop() 删除第一个元素
交集、并集、差集
print(s.intersection(s1))#交集
print(s & s1)
print(s.union(s1).union(s2))#并集
print(s | s1 | s2)
print(s.difference(s1))#差集,前边集合有,但是后边集合里边没有的元素的集合,具有局限性,只能s的元素数大于s1,否则输出空集合set()
print(s - s1)
# print(s.symmetric_difference(s1))# 对称差集 交集之外的元素,对于元素个数没有要求,都会输出差集。
# print(s ^ s1)
# for i in l:
# if i %2 != 0:
# l.remove(i)
# print(l)
list1 = l
# l.clear()