day07パイソン
A.補足知識
1。 ""。参加します()
S = "" .join要素の各種類の反復(( '1'、 '2'、 '3'、 '4'、 '5'))#文字列型 "" 何かの引用文字列内にスプライシング
プリント(S)
削除された要素の循環問題の2.list
LST = [1,2,3,4]
私LSTでのために:
lst.remove(I)
印刷(LST)
>>> [2,4]現在のサイクルの位置を追跡する変数があるため、2つの要素を残り#
解決方法
LST = [1,2,3,4]
LST1 = LST [:]#サイクル新しいリスト要素は削除の古いリストを取るために使用されます
私LST1内用:
lst.remove(I)
印刷(LST)
3.dictは時にループのサイズを変更し、その値の値を変更することができません
DECが{1:1.2:2.3:3.4:4.5:5} =
DICで私がのために:
dic.pop(I)
印刷(例えば)
>>>はRuntimeError:反復#ランタイムエラー時に辞書変更のサイズは、削除することはできません、増やすことはできません
解決方法
DECが{1:1.2:2.3:3.4:4.5:5} =
LST = []
DICで私がのために:
lst.append(I)
私LSTでのために:
dic.pop(I)
同じサイクルで(DIC)#リストを印刷新旧削除
4。{}。fromkeys()
DECが{1:1.2:2.3:3.4:4.5:5} =
RET = dic.fromkeys(「bajie」、「大唐」)#は、新しい辞書を返し、辞書には何の関係もなかったです
RET1 = dict.fromkeys( 'ABC'、 '666')#直接クラス名を使用してアクセス
印刷(例えば)
>>> {1:1,2:2,3:3,4:4,5:5}
print(ret)
>>>{'b': 'datang', 'a': 'datang', 'j': 'datang', 'i': 'datang', 'e': 'datang'}
print(ret1)
>>>{'a': '666', 'b': '666', 'c': '666'}
里面的列表是共享的
lst = [1,2,3,4,5]
ret = dict.fromkeys('abc', lst)
lst.append(6)
print(ret)
>>>{'a': [1, 2, 3, 4, 5, 6], 'b': [1, 2, 3, 4, 5, 6], 'c': [1, 2, 3, 4, 5, 6]} #所有人用的是同一个列表(判断是不是一个内存地址)
二.集合
1.set() , 不重复, 无序的, 里面的元素必须是可哈希的(不可变): 就是没有value的字典, 也用{}表示: 集合本身是可变的, 不可哈希
lst = [1,2,2,3,4,5,6,45,345,3,2,3,2,3,23,4,432,342,4]
lst = list(set(lst))
print(lst) #去重用集合, 很好用
2.增删改查(了解:用的时候回来看)
增
s = {1,2,3,4,5,6}
s.add() #增加一个元素
s.update('bajie') #迭代增加
print(s)
删
print(s.pop()) #随机弹出一个, 有返回值, 返回被弹出的元素
print(s)
s.remove(1) #删一个元素
s.clear() #清空
改
s.remove(2) #先删掉
s.add(6) #再添加
查
for i in s: #可用 for 循环
print(i)
3.集合的其他操作
交集
s1 = {1,2,3}
s2 = {2,3,4}
print(s1 & s2)
print(s1.intersection(s2))
并集
print(s1 | s2)
print(s1.union(s2))
差集
print(s1 - s2)
print(s1.difference(s2)) #得到第一个中单独存在的
反交集
print(s1 ^ s2)
print(s1.symmetric_difference(s2)) #两个集合单独存在的数据
子集
print(s1 < s2)
print(s1.issubset(s2))
超集
print(s1 > s2)
print(s1.issubset(s2))
4.frozenset() 是不可变的集合, 是可哈希的
5.哈希算法: 只要得到的结果是数字, 就认为是哈希算法
三.深浅拷贝
1.赋值拷贝:内存地址都相同
lst1 = [1,2,3,4,5,6]
lst2 = lst1 #赋值操作时, 内存的地址相同(有嵌套时, 第二层内存地址也相同)
lst1.append(7)
print(id(lst1),id(lst2))
2.浅拷贝:第一层内存地址相同, 第二层不同
lst2 = lst1[:] #浅拷贝,方式一
print(id(lst1),id(lst2)) #用切片取出来再赋值操作时, 内存地址就变了
lst2 = lst1.copy() #浅拷贝,方式二
print(id(lst1),id(lst2)) #内存地址不一样
lst1 = [1,2,3,4,5,6,[1,2,3,4,5,6]] #浅拷贝, 当有嵌套时, 只有第一层拷贝了, 第二层还是共用数据
lst2 = lst1.copy()
print(id(lst1[6])) #第二层嵌套的内存地址相同
print(id(lst2[6]))
3.深拷贝:第一层和第二层内存地址都不同
import copy
lst2 = copy.deepcopy(lst1) #深拷贝, 当有嵌套时, 所有层次都会拷贝
print(id(lst1[6])) #第二层嵌套的内存地址也变了
print(id(lst2[6]))
练习
cars = ['京A34567','冀R44566', '京A55899','冀R44566','冀R44566']
locals = {'京':'北京','冀':'河北省'}
rst = {}
for i in cars:
location = locals[i[0]]
if not rst.get(location):
rst[location] = 1
else:
rst[location] += 1
print(rst)
>>>{'北京': 2, '河北省': 3}