python能对数据汇总吗_python基础 基础数据汇总

本文详细介绍了Python的基础数据类型,包括列表的循环删除、布尔值、字典操作,以及集合的特性、操作方法如去重、关系测试。还探讨了深浅拷贝的区别,以及enumerate函数在遍历列表时的作用。通过实例展示了如何使用copy和deepcopy模块进行数据复制,并分析了它们在多层数据结构中的行为差异。
摘要由CSDN通过智能技术生成

1.基础数据类型汇总补充

list :再循环一个列表时,最好不要删除列表的元素,这样会使索引发生改变,从而报错。

lis = [11,22,33,44,55] #列表最后保留[11,33,55]

del lis[1::2] #直接删

print(lis)

li=[]for i inlis:if lis.index(i) % 2 ==0:

li.append(i)

lis=liprint(li)for i in range(len(lis)-1,-1,-1):if i % 2 == 1:dellis[i]print(lis)

bool:   false: 0 '' [] () {} set()

dict:再循环一个字典时,不要删除字典里面的键值对,会报错。

dic = dict.fromkeys #fromkeys()自动引用dict

dic={'k1':'v1','k2':'v1','a3':'v3'} #删除有'k'的键值对

dic1={}for i indic:if 'k' not ini:

dic1.setdefault(i,dic[i])

dic=dic1print(dic)

l=[]for i indic:if 'k' ini:

l.append(i)for i inl:deldic[i]print(dic)

tuple:

tu1 = (1)

tu2= (1,)print(tu1,type(tu1))print(tu2,type(tu2))

如果只有一个元素且不加,那此元素是什么类型就是什么类型。

2.集合set

1299727-20171222131013115-880202613.png

集合{}是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:

1.去重,把一个列表变成集合,就自动去重了。

2.关系测试,测试两组数据之前的交集、差集、并集等关系。

set1 = set({1,2,3})print(set1)

set2= {1,2,3,[2,3],{'name':'ssss'}} #错的

集合的增:

set1 = {'sole','memory','xiaoz','ban'}

set1.add('希望')

set1.update('A') #update:迭代着增加

set1.update([1,2,3])

集合的删:

set1 = {'sole','memory','xiaoz','ban'}

set1.pop()#随机删除 有返回值

set1.remove('alex') #按元素删除,没有就报错

set1.clear()#清空集合

del set1 #删除集合

集合的查:

set1 = {'sole','memory','xiaoz','ban'}for i in set1: #只有一种for循环

print(i)

集合的其他操作:

交集 (& 或者 intersection)

set = {1,2,3,4,5}

set2= {4,5,6,7,8}print(set & set2) #{4,5}

print(set.intersection(set2)) #{4,5}

并集(| 或者 union)

set = {1, 2, 3, 4, 5}

set2= {4, 5, 6, 7, 8}print(set | set2) #{1, 2, 3, 6, 7, 8}

print(set.union(set)) #{1, 2, 3, 6, 7, 8}

差集(- 或者 difference)

set = {1, 2, 3, 4, 5}

set2= {4, 5, 6, 7, 8}print(set - set2) #{1, 2, 3}

print(set2.difference(set2)) #{1, 2, 3}

反交集(^ 或者 symmetric_difference)

set = {1, 2, 3, 4, 5}

set2= {4, 5, 6, 7, 8}print(set ^ set2) #{1, 2, 3, 6, 7, 8}

print(set.symmetric_difference(set2)) #{1, 2, 3, 6, 7, 8}

子集与超集

set = {1,2,3,4,5}

set2= {4,5,6,7,8}print(set

print(set2 >set)print(set2.issuperset(set)) #这两个相同,都是说明set2是set1超集。

frozenset不可变集合,让集合变成不可变类型。

s = frozenset('sole')print(s,type(s)) #frozenset({'s', 'o, 'l', 'e'})

3.深浅copy

赋值运算

l1 = [1,2,3,['sole','memory']]

l2=l1

l1[0]= 111

print(l1) #[111, 2, 3, ['sole', 'memory']]

print(l2) #[111, 2, 3, ['sole', 'memory']]

l1[3][0] = 'wawu'

print(l1) #[111, 2, 3, ['wawu', 'memory']]

print(l2) #[111, 2, 3, ['wawu', 'memory']]

对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

浅copy

l1 = [1, 2, 3, ['sole', 'memory']]

l2=l1.copy()print(l1, id(l1)) #[1, 2, 3, ['sole', 'memory']] 2604585117704

print(l2, id(l2)) #[1, 2, 3, ['sole', 'memory']] 2604585134984

l1[1] = 222

print(l1, id(l1)) #[1, 222, 3, ['sole', 'memory']] 2604585117704

print(l2, id(l2)) #[1, 2, 3, ['sole', 'memory']] 2604585134984

l1[3][0] = 'wawu'

print(l1, id(l1[3])) #[1, 222, 3, ['wawu', 'memory']] 2604585132488

print(l2, id(l2[3])) #[1, 2, 3, ['wawu', 'memory']] 2604585132488

对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

深copy deepcopy 必须用import

importcopy

l1= [1,2,3,['sole','memory']]

l2=copy.deepcopy(l1)print(l1,id(l1)) #[1, 2, 3, ['sole', 'memory']] 3031168225992

print(l2,id(l2)) #[1, 2, 3, ['sole', 'memory']] 3031168226504

l1[1] = 222

print(l1,id(l1)) #[1, 222, 3, ['sole', 'memory']] 3031168225992

print(l2,id(l2)) #[1, 2, 3, ['sole', 'memory']] 3031168226504

l1[3][0] = 'wawu'

print(l1,id(l1[3])) #[1, 222, 3, ['wawu', 'memory']] 3031168228168

print(l2,id(l2[3])) #[1, 2, 3, ['sole', 'memory']] 3031168228232

对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

enumerate:枚举 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串)

enumerate将其组成一个索引序列,利用它可以同时获得索引和值。

li = ['sole','梦想','女神','memory']for i inenumerate(li):print(i)for index,name in enumerate(li,1):print(index,name)for index, name in enumerate(li, 100): #起始位置默认是0,可更改

print(index, name)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值