Python学习笔记(七)

基础数据类型的一些其他操作

# str
s = ''
print(s.isspace())   # 如果s是只由空格组成返回True,若是空或者(包含)其他字符返回False

# list
li = [11,22,33,44,55]
for i in range(len(li)):
    print(i)       # i = 0              i = 1               i = 2
    del li[i]
    print(li)     # [11,22,33,44,55]   [22, 44, 55]          [22, 44]
#之后报错,因为len(i)是在最初算出来的,进行删除操作后list内元素个数和对应索引发生变化。
#对于此列表打印li中的排序为奇数的元素
#方法一
li = [11,22,33,44,55]
li = li[::2]
print(li)     # [11, 33, 55]
#方法二
li = [11,22,33,44,55]
l1 = []
for i in li:
    if li.index(i) % 2 == 0:
        l1.append(i)
li = l1
print(li)      # [11, 33, 55]
#方法三
li = [11,22,33,44,55]
for i in range(len(li)-1,-1,-1):
    if i % 2 == 1:
        print(i)   # 3 1
        del li[i]
        print(li)     # [11, 22, 33, 55] [11, 33, 55]
print(li)     # [11, 33, 55]

dic = dict.fromkeys([1,2,3],'alice')
print(dic)        # {1: 'alice', 2: 'alice', 3: 'alice'}
dic = dict.fromkeys([1,2,3],[])
print(dic)        # {1: [], 2: [], 3: []}
dic[1].append('lucy')
print(dic)        # {1: ['lucy'], 2: ['lucy'], 3: ['lucy']}
dic[2].extend('jason')
print(dic)        # {1: ['lucy', 'a', 'b', 'c'], 2: ['lucy', 'a', 'b', 'c'], 3: ['lucy', 'a', 'b', 'c']}

l1 = []
l2 = l1
l3 = l1
l3.append('a')
print(l1,l2,l3)      #['a'] ['a'] ['a']

#元祖  如果元祖里面只有一个元素且不加,那此元素是什么类型,就是什么类型(看成是括号)。
tu1 = ([1])
tu2 = ([1],)
print(tu1,type(tu1))   # [1] <class 'list'>
print(tu2,type(tu2))   # ([1],) <class 'tuple'>

dic = dict.fromkeys([1,2,3,],3)
dic[1] = 4
print(dic)        # {1: 4, 2: 3, 3: 3}

集合

集合:可变的数据类型,他里面的元素必须是不可变的数据类型,无序,不重复。

注意{}是空字典,set()是空集合。

# 增 add 与 upd*te  (*应为a)
#add
set1 = {'alice','jack','mike','jason'}
set1.add('tifa')
print(set1)      # {'alice', 'jack', 'mike', 'tifa', 'jason'} 多次输出次序不同(无序性)
#upd*te
set1 = {'alice','jack','mike','jason'}
set1.upd*te('tifa')
print(set1)    # {'jack', 'mike', 'f', 't', 'a', 'alice', 'jason', 'i'}

# 删
set1.pop()       #随机删除,有返回值
set1.remove('alice')    #按元素删除
set1.clear()      #清空集合中的内容     执行后打印set1输出为"set()"
del set1   #删除集合

# 改 (集合中都是不可变数据类型)

# 查  用for循环遍历的方式

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

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

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

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

# 子集与超集
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超集。

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

# 去重
li = [1,2,33,33,2,1,4,5,6,6]
set1 = set(li)
li = list(set1)
print(li)      # [1, 2, 33, 4, 5, 6]

深浅copy

# 赋值运算

l1 = [1,2,3]
l2 = l1
l1.append('a')
print(l1,l2)    # [1, 2, 3, 'a'] [1, 2, 3, 'a']

# 浅拷贝copy
l1 = [1,2,3]
l2 = l1.copy()
# print(l1,l2)
# print(id(l1),id(l2))    # id不同
l2.append('a')
print(l1,l2)        # [1, 2, 3] [1, 2, 3, 'a']
######
l1 = [1,2,[4,5,6],3]
l2 = l1.copy()
print(l1,id(l1))
print(l2,id(l2))       # l1和l2的id不同
l1.append('a')
print(l1,l2)           # [1, 2, [4, 5, 6], 3, 'a'] [1, 2, [4, 5, 6], 3]
l1[2].append('a')
print(l1,l2)       # [1, 2, [4, 5, 6, 'a'], 3, 'a'] [1, 2, [4, 5, 6, 'a'], 3]
print(id(l1[2]))
print(id(l2[2]))  # l1[2]和l2[2]的id相同
'''
对于浅copy来说,只是在内存中重新创建了开辟了一个空间存放一个新列表,但是新列表中的元素与原列表中的元素是公用的。
'''

# 深拷贝deepcopy
import copy
l1 = [1,2,[4,5,6],3]
l2 = copy.deepcopy(l1)
print(l1,id(l1))
print(l2,id(l2))
l1[2].append('a')
print(l1,l2)    # [1, 2, [4, 5, 6, 'a'], 3] [1, 2, [4, 5, 6], 3]
'''
对于深copy来说,列表是在内存中重新创建的,列表中可变的数据类型是重新创建的,列表中的不可变的数据类型是公用的。
'''

l1 = [1,[1],2,3,4]
l2 = l1[:]         # 浅拷贝
l1[1].append('a')
print(l1,id(l1))
print(l2,id(l2))
print(l1[1] is l2[1])       # True

li = ['alice','mike','Tifa','jack']
for i in li:
    print(li.index(i),i)

'''
0 alice
1 mike
2 Tifa
3 jack
'''
for index,i in enumerate(li,1):
    print(index,i)
'''
1 alice
2 mike
3 Tifa
4 jack
'''
0

发表评论

您的电子邮箱地址不会被公开。