码迷,mamicode.com
首页 > 编程语言 > 详细

python学习7

时间:2018-07-22 00:28:41      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:upd   closed   赋值运算   type   abc   rate   一个   diff   nbsp   

1.在列表和字典的循环中,不能直接删除它们

删除第1、3位的元素 lis = [11,22,33,44,55]
#方法1
‘‘‘lis = [11,22,33,44,55]
li = []
for i in range(len(lis)):
    if i % 2 == 0:
        li.append(lis[i])
lis = li
print(li)
‘‘‘
#方法2
lis = [11,22,33,44,55]
tu = tuple(lis)
for i in range(len(lis)):
    if i % 2 == 1:
        lis.remove(tu[i])
print(lis)

删除字典dic = {‘k1‘:‘v1‘,‘k2‘:‘v2‘,‘a3‘:‘v3‘}中相应的键值对

# dic1 = {}
dic = {k1:v1,k2:v2,a3:v3}
# for i in dic:
#     if ‘k‘ not in i:
#         dic1.setdefault(i,dic[i])
# dic = dic1
# print(dic)

# l = []
# for i in dic:
#     if ‘k‘ in i:
#         l.append(i)
# for i in l:
#     del dic[i]
# print(dic)

元组

tu1 = (1)  int
tu2 = (1,) tuple

2.集合
集合是可变的,它里面的元素不可变,集合是无序的且不重复的
集合有增加、删除、查询、交并差等操作
1.增加
.add() / .update()
# set1 = set({1,2,3})
# set2 = {1,2,3,[3,4],{‘name‘:‘alwx‘}}   #错的
# print(set1,set2)
set1 = {alex,wusir,ritian,egon,barry,barrry}
#add  加一个元素
set1.add(女生)
print(set1)
#update  迭代添加
set1.update(abc)
print(set1)

2.删除

.pop()   /  .remove()   / del   /.clear()

# #删除  pop
# print(set1.pop())    #随机删除,有返回值
# print(set1)
#
# #按元素删除  remove
# set1.remove(‘alex‘)
# print(set1)

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

#del 删除整个集合
# del set1
# print(set1)

3.没有改,查只能按照for循环来查,因为集合是无序的

for i in set1:
    print(i)

4.交集,并集,反交集,差集,子集,超集

&, .intersection()   

 |  , .union()

^  ,  .symmetric_difference()

set1 - set2   , .difference()

set1 < set2 返回bool值,就是比较集合的包含关系

技术分享图片
#特殊之处   可以求交并差集
#交集
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2) #{4,5}
print(set1.intersection(set2)) #{4,5}
set3 = set1 & set2

#并集
print(set1 | set2)
print(set2.union(set1)).

#反交集   除了交集之外的并集
print(set1 ^ set2)
print(set1.symmetric_difference(set2))


#差集
print(set1 - set2)  #set1独有的
print(set1.difference(set2))


#子集与超集  比较包含关系,返回bool值
set1 = {1,2,3}
set2 = {1,2,3,4,5}
print(set1 < set2)
print(set1.issubset(set2))
View Code

5.例题  去除列表中的重复元素

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

集合可以冻结,变成不可变数据类型

#set 本身是可变的,内部元素不可变,将set冻结
s = frozenset(barry)   #变成不可变数据类型,只读,无序
print(s,type(s))
for i in s:
    print(i)

6.深浅copy

赋值运算后,两个变量指向同一个内存地址,改变一个会引起另外一个的改变

copy运算后,两个变量内存地址不相同,改变 一个不会引起另外一个的改变

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

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

[1, 2, 3, a] [1, 2, 3, a]
[1, 2, 3] [1, 2, 3]
1921628470728 1921628348040
[1, 2, 3] [1, 2, 3, a]

copy运算后,里面   列表    的内存地址不变

l1 = [1,2,[4,5,6],3]
l2 = l1.copy()

print(l1,id(l1))
print(l2,id(l2))
l1.append(a)
print(l1,l2)
l1[2].append(a)
print(l1,l2)
print(id(l1[2]))
print(id(l2[2]))

###################
[1, 2, [4, 5, 6], 3] 1921627608072
[1, 2, [4, 5, 6], 3] 1921628470728
[1, 2, [4, 5, 6], 3, a] [1, 2, [4, 5, 6], 3]
[1, 2, [4, 5, 6, a], 3, a] [1, 2, [4, 5, 6, a], 3]
1921628470856
1921628470856

 

深度copy   列表的内存地址改变了,两个列表不相互影响

但是   l2 = l1[:]  赋值运算会导致两个列表的内存地址不一样,但是值却会相互影响而改变

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)
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])
#########################
[1, 2, [4, 5, 6], 3] 1921630006344
[1, 2, [4, 5, 6], 3] 1921627608072
[1, 2, [4, 5, 6, a], 3] [1, 2, [4, 5, 6], 3]
[1, [1, a], 2, 3, 4] 1921628470856
[1, [1, a], 2, 3, 4] 1921630006344
True

循环输出列表元素和它的序号

li = [alex,taibai,wusir,egon]
for i in li:
    print(li.index(i) + 1,i)

for index,i in enumerate(li,1):
    print(index,i)

 

python学习7

标签:upd   closed   赋值运算   type   abc   rate   一个   diff   nbsp   

原文地址:https://www.cnblogs.com/benbenxiaofeifei/p/9348342.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!