数据类型补充

一、int , str , tuple 补充

 1 #str
 2 s = ' ' #只能是以至少一个空格组成的字符串(全空格)
 3 print(s.isspace)
 4 #tuple 
 5 #当元组只有一个元素组成并且没有','
 6 #则改元素是什么数据类型,整体就是什么数据类型
 7 tu = (1)
 8 tu1 = (1,)
 9 tu2 = ([222,333],)
10 print(tu,type(tu)) #int型
11 print(tu1,type(tu1)) #tuple型
12 print(tu2,type(tu2)) #tuple 型

二、list,dict 补充

 1 #在循环一个列表时,如果要是删除某些或者某类元素,容易出错.
 2 l1 = [111,222,333,444,555] #将索引为奇数位的元素删除
 3 #方法一
 4 l2 = []
 5 for i in range(len(l1)):
 6     if i % 2 == 0:
 7         l2.append(l1[i])
 8 print(l2)         
 9 #方法二
10 del l1[1::2]
11 print(l1)
12 #方法三
13 for i in range(len(l1)-1,0 ,-1):
14     if i % 2 == 1:
15         del l1[i]
16 print(l1)
17 
18 #fromkeys()
19 dic = dict.fromkeys('abc','alex')
20 print(dic) 
21 #{'a': 'alex', 'b': 'alex', 'c': 'alex'}
22 #在循环一个字典时,如果删除某些键值对,可能会报错.
23 dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'}
24 l1 = []
25 for i in dic:
26     if 'k' in i:
27         l1.append(i)
28 print(l1)
29 for k in l1:
30     del dic[k]
31 print(dic)
32 
33 #数据类型之间的转化:
34 #int <---> str
35 #int <---> bool
36 #str <--->.bool
37 #    split
38 #str <------> list
39 #     join
40 #tuple <---> list
41 l1 = [1,2,3]
42 tu = tuple(l1)
43 l2 = list(tu)
44 print(tu,l2)
45 
46 #dict专属类型:与list转换
47 dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'}
48 print(list(dic.keys()))
49 print(list(dic.values()))
50 print(list(dic.items()))

三、深浅copy

 1 l1 = [1,2,3,4]
 2 l2 = l1
 3 l1.append(5)
 4 print(l1,l2)
 5 #对于赋值运算,就是共同指向一个内存地址
 6 #浅copy
 7 l1 = [1,[22,33],2,3]
 8 l2 = l1.copy()
 9 l1.append(666)
10 print(l1,id(l1))
11 print(l2,id(l2))
12 #对于浅copy来说,第一层都是独立的内存地址,从第二层开始,
13 #都是指向同一个内存地址,一变都变
14 l1 = [1,[22,33,],2,3]
15 l2 = l1.copy()
16 l1[1].append(666)
17 print(l1,id(l1),id(l1[1]))
18 print(l2,id(l2),id(l2[1]))
19 #深copy
20 l1 = [1,[22,33,],2,3]
21 l2 = copy.deepcopy(l1)
22 l1.append(777)
23 l1[1].append(666)
24 print(l1,id(l1),id(l1[1]))
25 print(l2,id(l2),id(l2[1]))
26 #对于深copy,无论多少层,在内存中都是两个独立的内存地址

 四、集合

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

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

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

1.集合的创建

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

2.集合的增

 1 set1 = {'alex','wusir','ritian','egon','barry'}
 2 set1.add('景女神')
 3 print(set1)
 4 
 5 #update:迭代着增加
 6 set1.update('A')
 7 print(set1)
 8 set1.update('老师')
 9 print(set1)
10 set1.update([1,2,3])
11 print(set1)

3.集合的删

set1 = {'alex','wusir','ritian','egon','barry'}

set1.remove('alex')  # 删除一个元素
print(set1)

set1.pop()  # 随机删除一个元素
print(set1)

set1.clear()  # 清空集合
print(set1)

del set1  # 删除集合
print(set1)

4.集合的其他操作

  4.1 交集(& )

1 set1 = {1,2,3,4,5}
2 set2 = {4,5,6,7,8}
3 print(set1 & set2)  # {4, 5}
4 print(set1.intersection(set2))  # {4, 5}

  4.2 并集(|)

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

  4.3 差集(-)

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

  4.4 反交集(^)

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

  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超集。

  4.6 forzenset 不可变集合,让集合变成不可变类型

s = frozenset('barry')
print(s,type(s))  # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>

 

posted @ 2018-01-29 16:35  WoLfff  阅读(108)  评论(0编辑  收藏  举报