day7 基础数据类型补充 集合

基础数据类型补充:
  元组:如果元组中只有一个数据,且没有逗号,则该 '元组' 与里面的数据的数据类型相同。
    tu1 = (1,)
    tu2 = ('alex')
    tu3 = ([1,2,3],)
    print(tu1,type(tu1))
    print(tu2,type(tu2))
    print(tu3,type(tu3))
  列表 列表与列表可以相加
    l1 = [1,2,3]
    l2 = ['alex','wusir']
    l3 = l1 + l2
    print(l3)
 在循环一个列表时,如果对列表中的某些元素进行删除,
那么此元素后面的所有元素就会向前进一位,他们的索引就会发生变化
 在循环一个列表时,最好不要对此列表进行改变大小(增删)的操作。
 
字典:

  fromkeys()
  dic1 = dict.fromkeys([1,2,3],'alex')
  print(dic1)
  结果:{1: 'alex', 2: 'alex', 3: 'alex'}

  面试题:创建字典的方式
  1,
  dic = {'name':'alex'}
  2
  dic = dict({'name':'alex'})
  print(dic)
  3, fromkeys()

陷阱:
  dic1 = dict.fromkeys([1,2,3],[])
  print(dic1)
  # dic1[1].append('alex')
  print(dic1)
  print(id(dic1[1]))
  print(id(dic1[2]))
  print(id(dic1[3])) #3个值都会变化

dic = {'key1': 'value1','key2': 'value2', 'k3':'v3', 'name': 'alex'}
# 将 dic的键中含有k元素的所有键值对删除。
# for key in dic:
#     if 'k' in key:
#         dic.pop(key)
#dictionary changed size during iteration: #在循环一个字典时,不能改变字典的大小。
l1 = []
for key in dic:
    if 'k' in key:
        l1.append(key)
# print(l1)
for key in l1:
    dic.pop(key)
print(dic)
str ---> list
  s1 = 'alex wusir taibai'
  l1 = s1.split()
  print(l1)
list ---> str 此list中的元素全部是str类型
  l1 = ['alex', 'wusir', 'taibai', 100]
  # s2 = ' '.join(l1)
  # print(s2)
 
tuple <---> list
  l1 = [1,2,3]
  tu1 = tuple(l1)
  print(tu1)
  tu2 = (0,2,3)
  l1 = list(tu2)
  print(l1)
0 "  [] () {} set() ---> bool False

集合:
 面试必考:list去重  *****
  l1 = [1,1,2,3,4,4,3,2,1,5,5]
  set1 = set(l1)
  l2 = list(set1)
  print(l2)
  
    set1.add('女神')
    print(set1)

    set1.update('abc')
    print(set1)

  
    set1.remove('alex') 按元素删除
    print(set1)
    set1.pop() 随机删除
    print(set1)
    set1.clear() 清空
    print(set1)

    del set1 删除集合
    print(set1)

frozenset不可变集合,让集合变成不可变类型
>>> a = set('abracadabra') 
>>> b = set('alacazam')
>>> a
{'a', 'r', 'b', 'c', 'd'}
差集。(- 或者 difference)a - b # 集合a中包含元素
{'r', 'd', 'b'} 
并集。(| 或者 union)a | b # 集合a或b中包含的所有元素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'} 
交集。(&  或者 intersection)a & b # 集合a和b中都包含了的元素
{'a', 'c'}
反交集。 (^ 或者 symmetric_difference)a ^ b #不同时包含于a和b的元素
{'r', 'd', 'b', 'm', 'z', 'l'}

4.5子集与超集
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}

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

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

 

深浅copy:

  赋值运算 对于赋值运算来说,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']]

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

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

l2 = l1.copy()
print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2380296895816
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2380296895048
l1[1] = 222
print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2593038941128
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2593038941896
 
l1[3][0] = 'wusir'
print(l1,id(l1[3]))  # [1, 2, 3, ['wusir', 'alex']] 1732315659016
print(l2,id(l2[3]))  # [1, 2, 3, ['wusir', 'alex']] 1732315659016
  深拷贝deepcopy 对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变
import copy
l1 = [1,2,3,['barry','alex']]
l2 = copy.deepcopy(l1)

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

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

l1[3][0] = 'wusir'
print(l1,id(l1[3]))  # [1, 222, 3, ['wusir', 'alex']] 2915377167240
print(l2,id(l2[3]))  # [1, 2, 3, ['barry', 'alex']] 2915377167304
 

 

猜你喜欢

转载自www.cnblogs.com/qq752059037/p/9461073.html