python-list和tuple
一、列表补充
1、list(iterable)只能是一个参数,并且是可迭代的
2、' '.join(iterable) ---->把可迭代的合并成一个字符串
# 随机产生qq号码:5-10 0不能开头 import random qq = [] count = 0 while True: ran = random.randint(0,9) if count ==0 and ran == 0: continue qq.append(str(ran)) count+=1 if count ==10: break print(qq) b = ''.join(qq) print(b)
3、count的使用
# count的使用 list = [1,3,5,7,9,3,2,1,4,7,3,9] count = 0 for i in list: if i==3: count+=1 print(count) print(list.count(3))
4、符号: + * [] [:] in is
list = [1,2,3,4] list2 = [1,3,4,6] list_add = list+list2 print(list_add) list_c = list*2 print(list_c)
5、运算系统的内置函数:sum() min() max() sorted() cmp() python3.x中cmp已经不支持了在列表中。
import random numbers = [] for i in range(10): ran = random.randint(1,30) numbers.append(ran) print(numbers) print(sum(numbers)) max_value = max(numbers) print(max_value) min_value = min(numbers) print(min_value) sort =sorted(numbers,reverse=True) print(sort)
注:列表排序:
系统排序:sorted(list) ---- 返回的就是排序后的结果
list2 = sorted(list)
列表自身排序:sort()
list1.sort() -----没有返回值,将list1进行排序
print(list1) 排序好的列表
降序排列:
list1=[3,6,9,10,2,4,0] list2 = sorted(list1,reverse=True) print('方式一:',list2) list1.sort(reverse=True) print('方式二:',list1)
-----------------------------------
补充:python的可变 不可变
不可变:只要改变变量的值则地址发生改变,则认为此类型是不可变类型
int str float tuple bool
可变:内容发生改变,但是地址没有发生改变,则认为此类型是可变类型
list set dict
list1 = [2, 3, 5] print(list1) print(id(list1)) list1.append(8) print(list1) print(id(list1)) # [2, 3, 5] # 1673370433160 # [2, 3, 5, 8] # 1673370433160 set1 = {4, 7, 0, 2} print(id(set1)) set1.add(8) print(id(set1)) # 1673369536104 # 1673369536104 dict1 = {'a': 1, 'b': 2, 'c': 3} print(id(dict1)) dict1.popitem() print(id(dict1)) # 1673369509608 # 1673369509608
二、python直接赋值、浅拷贝和深度拷贝解析
直ji接赋值:其实就是对象的引用
浅拷贝copy.copy():拷贝父对象,不会拷贝对象内部的子对象
深度拷贝copy.deepcopy():copy模块的deepcopy方法,完全拷贝父对象和子对象
1、b=a 赋值引用,a和b都指向同一个对象
2、b=a.copy() 浅拷贝,a和b是一个独立的对象,但它们的子对象还是指向同一对象
3、b = copy.deepcopy(a) 深度拷贝,a和b完全拷贝了父对象和子对象,两者完全独立的
示例:
import copy a = ['张三', '里斯', '王五', '赵六', ['a', 'b', 'c']] # 原始对象 b = a # 赋值,传对象的引用 c = copy.copy(a) # 对象拷贝,浅拷贝 d = copy.deepcopy(a) # 对象拷贝,深拷贝 a.append('刚') # 修改对象a a[4].append('d') # 修改对象a中的数组对象 print('a=', a) print('b=', b) print('c=', c) print('d=', d)
三、元组
1、特点:类似列表,不支持删除、添加、修改
2、声明:tuple()
tuple()一旦初始化就不能修改,如果可能,能用tuple代替list就尽量用tuple
元组中只包含一个元素时,需要在元素后面添加逗号
tuple=(3,)
3、元组支持下标和切片
tuple=(1,2,4,6,8,10) print(tuple[-1]) print(tuple[:3]) print(tuple[::-1])
4、元组的内置函数
不支持: 添加 、删除、修改
支持:
1》查找:index() 返回第一次找到的位置
2》统计个数:count()
tuple1 = (1,4,3,2,6,2) print(tuple1.index(2)) # 返回第一次找到的位置 n = tuple1.count(2) print(n)
3》排序:可以使用sorted系统函数排序,但是返回的结果是一个列表
tuple1 = (1,2,5,7,9) list1 = sorted(tuple1) tuple1 = tuple(list1) print(tuple3) #升序 ,得到的是一个列表
4》类型的转换:
列表---》元组:tuple(list) 得到的是元组类型
元组----》列表:list(tuple) 得到的是列表
5、元组可以支持的符号:+ * [] [:] in is
tuple1 = (1,4,3,2,6,2) tuple2 = (2,4,6,8) new_tuple = tuple1+tuple2 print(new_tuple) print(tuple2*2) # 判断是否在元组中 print(4 in tuple2) print(1 in tuple1)
注:元组是不允许修改的这里的添加元素其实是一种转化
import random tuple1 = (1,) list1 = list(tuple1) for i in range(10): ran = random.randint(1,10) list1.append(ran) # 将列表转成元组 tuple2 = tuple(list1) print(tuple2)