Python学习

1、集合:

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

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

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

2、集合的创建

set1 = set({1,2,'barry'})
set2 = {1,2,'barry'}
print(set1,set2)
# {1, 2, 'barry'} {1, 2, 'barry'}

3、集合的增(add,update)

  add:随机添加

set1 = {'罗伊人','林拜','熊青春','白力勤','陈香'}
set1.add('郑秋冬')
print(set1)

  update:迭代增加,随机

set1 = set()
set1.update('郑秋冬')
print(set1)
set1.update(['罗伊人','熊青春','贾衣玫'])
print(set1)

4、集合的删(remove(),pop(),clear(),del)

set1 = {'郑秋冬','罗伊人','熊青春','贾衣玫','林拜','白力勤','袁昆'}

set1.remove('白力勤')
print(set1)

print(set1.pop(),set1)

set1.clear()
print(set1)

del set1
print(set1)

5、集合的查(for循环)

set1 = {'郑秋冬','罗伊人','熊青春','贾衣玫','林拜','白力勤','袁昆'}

for i in set1:
    print(i)

6、集合的其他操作

  1)交集( & intersection)

set1 = {'郑秋冬','罗伊人','熊青春','贾衣玫','林拜','白力勤','袁昆'}
set2 = {'罗伊人','熊青春','贾衣玫','冯眷眷','周淮兰','简娜','周霜荷'}
print(set1 & set2)
print(set1.intersection(set2))

# {'罗伊人', '熊青春', '贾衣玫'}

  2)并集( | union)

set1 = {'郑秋冬','罗伊人','熊青春','贾衣玫','林拜','白力勤','袁昆'}
set2 = {'罗伊人','熊青春','贾衣玫','冯眷眷','周淮兰','简娜','周霜荷'}

print(set1 | set2)
print(set1,set2,set2.union(set1))

  3)差集( - difference)

set1 = {'郑秋冬','罗伊人','熊青春','贾衣玫','林拜','白力勤','袁昆'}
set2 = {'罗伊人','熊青春','贾衣玫','冯眷眷','周淮兰','简娜','周霜荷'}

print(set1 - set2)
print(set1.difference(set2))

  4)反交集( ^ symmetric_difference)

set1 = {'郑秋冬','罗伊人','熊青春','贾衣玫','林拜','白力勤','袁昆'}
set2 = {'罗伊人','熊青春','贾衣玫','冯眷眷','周淮兰','简娜','周霜荷'}

print(set1 ^ set2)
print(set1.symmetric_difference(set2))

  5)子集与超级

set1 = {'罗伊人','熊青春','贾衣玫'}
set2 = {'罗伊人','熊青春','贾衣玫','冯眷眷','周淮兰','简娜','周霜荷'}

print(set1 < set2)
print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。

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

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

s = frozenset('barry')
print(s,type(s))

7、深浅copy

  1)赋值运算

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

l1 = [1,2,3,['barry','alex']]
l2 = l1

l1[0] = 111
print(l1)  # [111, 2, 3, ['barry', 'alex']]
print(l2)  # [111, 2, 3, ['barry', 'alex']]

l1[3][0] = 'wusir'
print(l1)  # [111, 2, 3, ['wusir', 'alex']]
print(l2)  # [111, 2, 3, ['wusir', 'alex']]

  2)浅拷贝copy

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

l1 = [1,2,3,['barry','alex']]
l2 = l1.copy()
print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2794248428424
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2794248428616
l1[1] = 222
print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2794248428424
l1[3][0] = 'wusir'
print(l1,id(l1[3]))  # [1, 222, 3, ['wusir', 'alex']] 2794248428680
print(l2,id(l2[3]))  # [1, 2, 3, ['wusir', 'alex']] 2794248428680

  3)深拷贝deepcopy

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

import copy
l1 = [1,2,3,['barry','alex']]
l2 = copy.deepcopy(l1)

print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2792837924552
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2792837926088

l1[1] = 222
print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2792837924552
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2792837926088

l1[3][0] = 'wusir'
print(l1,id(l1[3]))  # [1, 222, 3, ['wusir', 'alex']] 2792837897224
print(l2,id(l2[3]))  # [1, 2, 3, ['barry', 'alex']] 2792837935496
原文地址:https://www.cnblogs.com/SharkJiao/p/9353140.html