コレクション
namedtupleキーワード引数タプル
私はそれを知っているtuple
、例えば、点の2次元座標は次のように表すことができ、同じコレクションを表すことができます。
しかしながら、参照(1、2)、このタプルが座標を表すために使用される参照することは困難です。
この時点で、namedtuple
それが便利に来ました:
以下からのコレクションのインポートnamedtuple #あなたが値リストを通過することができます 。#という名前のタプル #1 ポイント= namedtuple(「座標」、[「X」、「Y」、「Z」]) #ビット個人matplotlibのように使用していますここでは、いじくり彼らは自動的にリストに切断されている、などの文字列をサポート #1 = namedtupleポイント( '座標'、 'XY Z') #P =ポイント(1,2,4) #の印刷(P) #1 プリント(型(P )) #の印刷(PX) #の印刷(PY) #の印刷(PZ) #のカードnamedtuple =( 'ポーカー'、 '色番号') #A =カード( 'スペード'、 'A') #の印刷( ) #印刷(A.色) #の印刷(A.number) # # # #シティnamedtuple =( '日本'、 '人の名前サイズ') #C =都市( '東京'、 'R教師'、 'L') #の印刷(C) #印刷(c.NAME) #を印刷(c.person) #の印刷(c.size)
両端キュー両端キュー
データ記憶装置のリストを使用する場合、すばやくインデックスで要素にアクセスするが、要素を挿入および除去することは非常に遅く、リストは線形メモリ、大容量のデータであるため、効率が非常に低い挿入及び欠失です。
両端キューは、双方向リストの効率的な挿入および削除を達成キューに入れ、適しスタックすることです:
#コレクションからは、両端キューインポート #Q =両端キュー([ 'A'、 'B'、 'C']) 位appendleft追加 #1 ポップpopleftポップ(0) #1 q.append(1) #1 q.appendleft(2) # # #1 q.insert(0、 'Hello Worldの') #の印刷(q.pop()) #の印刷(q.popleft()) #の印刷(q.popleft())
OrderDict特別注文した辞書
辞書を使用する場合は、キーが無秩序です。辞書の反復が実行すると、我々はキーの順序を決定することはできません。
あなたは順序キーを保持したい場合は、使用することができますOrderedDict
:
#normal_d = dictの([( 'A'、1)、( 'B'、2)、( 'C'、3)]) #1 プリント(normal_d) #コレクションからインポートOrderedDict 不可思议吧对就是这样 #order_d = OrderedDict ([( 'A'、1)、( 'B'、2)、( 'C'、3)]) #1 プリント(order_d、タイプ(order_d)) #order_d1 = OrderedDict() #1 order_d1 [ 'X'] = 1 #order_d1 [ 'Y'] = 2 #order_d1 [ 'Z'] = 3 #プリント(order_d1) #I order_d1にするため: #1 プリント(I) #1 プリント(order_d1)
後ろのパラメータに応じて決定、辞書項目を作成し、デフォルトでは存在defaultdict
使用はdict
、参照キーが存在しない場合は、それがスローされますKeyError
。あなたはキーが存在しない、デフォルト値を返したい場合は、使用することができますdefaultdict
#コレクションからdefaultdictインポート #1 #1 =値を[11 22 33であり、55、66、77、88、99、90、44である] #1 K2、#直接K1内部良い辞書を作成に関しては、特別な辞書オブジェクトを生成しますキー[]この方法に流路を配置する場合は #1 = defaultdict(一覧)my_dict #の #の印刷(my_dict [ 'AAA']) # :値の値の # IF値> 66: # 。my_dict [ 'K1']アペンド(値) # 他に: #1 。my_dict [ 'K2']のappend(値) #の印刷(my_dict) # # my_dict1 = defaultdict(INT) #の印刷(my_dict1 [ 'XXX']) #の印刷(my_dict1 [ 'YYY']) # # my_dict2 = defaultdict(BOOL) #1 プリント(my_dict2) # # my_dict3 = defaultdict(タプル) #1 プリント(my_dict3 [ 'MMM'])
カウンターの数を数えます
カウンタオブジェクトクラスは、発生値の数を追跡するために使用されます。それは、そのカウント値としてキー、などの要素辞書に格納されたキーと値のペアの形式で、容器の順序付けられていないタイプです。カウント値が(0と負の数を含む)任意Intergerであってもよいです。カウンターのクラスや他の言語のバッグやマルチセットに非常に似ています。
#は、各文字の数一覧表示できます #の各文字列は、新しいキーと値のペアのパラダイム辞書話すために使用されている現在の文字列サイクルに からコレクションのインポートカウンター S = 「; FHAあなたはgkaj afafhkjfhl 」 RES = カウンタ(S) 印刷(RES)を ため、私は中RES: 印刷(I)
時間
3つの方法が時間を表し、
タイムスタンプタプル(するstruct_time)、フォーマットされたタイム・ストリング:Pythonで、時間を表現する3つの方法が一般的にあります。
(1)タイムスタンプ(タイムスタンプ):一般的に言って、タイムスタンプは1970年1月から夜12時〇〇分00秒第一は、秒単位でプレスをオフセットことを示しています。私たちは、 "タイプは(time.time())"、floatを返す実行します。
(2)フォーマットされた時刻文字列(書式文字列):「1999年12月6日」
(3)タプル(なstruct_time):9つの要素のタプルなstruct_timeの合計は、9つの要素でした:(年、月、日、時、分、秒、年の最初の数週間、年などの日)
#一般的な方法 1 .time.sleep(秒) を実行するには、指定された時間を延期する(スレッド)。秒。 2 .time.time() 現在のタイムスタンプを取得します
#インポート時間モジュール >>>インポートタイム #タイムスタンプ >>> time.time() 1,500,875,844.800804 #時刻の文字列 >>> time.strftime( "%% Y-X-M-%のDの%") 「2017-07-午後01時54分37秒24 ' >>> time.strftime( "%D %% Y-H-M - %%% M-S") ' 2017年7月24日13-55-04 ' #時間タプル: localtimeの現在のタイムゾーンするstruct_time用のタイムスタンプに変換します )(time.localtimeを time.struct_time(tm_yearが= 2017、= tm_mon。7、24 = tm_mday、 tm_hour = 13であり、tm_min = 59、= 37のtm_sec、 tm_wdayコンポーネント= 0、= tm_ydayを205、tm_isdstが= 0)
要約:コンピュータは、時間のタイムスタンプを識別することができる、時間列は、1つの時間を読み取ることができるであるタプルは、時間を操作するために使用され
数回の間のフォーマット変換
タイプの時間トランスコーディング
#时间戳-->结构化时间 #time.gmtime(时间戳) #UTC时间,与英国伦敦当地时间一致 #time.localtime(时间戳) #当地时间。例如我们现在在北京执行这个方法:与UTC时间相差8小时,UTC时间+8小时 = 北京时间 >>>time.gmtime(1500000000) time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=2, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0) >>>time.localtime(1500000000) time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0) #结构化时间-->时间戳 #time.mktime(结构化时间) >>>time_tuple = time.localtime(1500000000) >>>time.mktime(time_tuple) 1500000000.0
#结构化时间-->字符串时间 #time.strftime("格式定义","结构化时间") 结构化时间参数若不传,则显示当前时间 >>>time.strftime("%Y-%m-%d %X") '2017-07-24 14:55:36' >>>time.strftime("%Y-%m-%d",time.localtime(1500000000)) '2017-07-14' #字符串时间-->结构化时间 #time.strptime(时间字符串,字符串对应格式) >>>time.strptime("2017-03-16","%Y-%m-%d") time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1) >>>time.strptime("07/24/2017","%m/%d/%Y") time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1)
其他时间格式转化为固定格式的字符串时间格式
#结构化时间 --> %a %b %d %H:%M:%S %Y串 #time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串 >>>time.asctime(time.localtime(1500000000)) 'Fri Jul 14 10:40:00 2017' >>>time.asctime() 'Mon Jul 24 15:18:33 2017' #时间戳 --> %a %b %d %H:%M:%S %Y串 #time.ctime(时间戳) 如果不传参数,直接返回当前时间的格式化串 >>>time.ctime() 'Mon Jul 24 15:19:07 2017' >>>time.ctime(1500000000) 'Fri Jul 14 10:40:00 2017'
datetime 日期时间,可以方便计算日期时间差
import datetime
# print(datetime.date.today()) # date>>>:年月日
# print(datetime.datetime.today()) # datetime>>>:年月日 时分秒
# res = datetime.date.today()
# res1 = datetime.datetime.today()
# print(res.year)
# print(res.month)
# print(res.day)
# print(res.weekday()) # 0-6表示星期 0表示周一
# print(res.isoweekday()) # 1-7表示星期 7就是周日
"""
(******)
日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象
"""
# current_time = datetime.date.today() # 日期对象
# timetel_t = datetime.timedelta(days=7) # timedelta对象
# res1 = current_time+timetel_t # 日期对象
#
# print(current_time - timetel_t)
# print(res1-current_time)
random 随机生成模块
# 随机模块 import random # print(random.randint(1,6)) # 随机取一个你提供的整数范围内的数字 包含首尾 # print(random.random()) # 随机取0-1之间小数 # print(random.choice([1,2,3,4,5,6])) # 摇号 随机从列表中取一个元素 # res = [1,2,3,4,5,6] # random.shuffle(res) # 洗牌 # print(res)
列子:随机生成n位数的随机验证码
def get_code(n): code = '' for i in range(n): # 先生成随机的大写字母 小写字母 数字 upper_str = chr(random.randint(65,90)) lower_str = chr(random.randint(97,122)) random_int = str(random.randint(0,9)) # 从上面三个中随机选择一个作为随机验证码的某一位 code += random.choice([upper_str,lower_str,random_int]) return code res = get_code(4) print(res)
os 跟操作系统打交道的模块
import os # BASE_DIR = os.path.dirname(__file__) # MOVIE_DIR = os.path.join(BASE_DIR,'老师们的作品') # movie_list = os.listdir(MOVIE_DIR) # while True: # for i,j in enumerate(movie_list,1): # print(i,j) # choice = input('你想看谁的啊(今日热搜:tank老师)>>>:').strip() # if choice.isdigit(): # 判断用户输入的是否是纯数字 # choice = int(choice) # 传成int类型 # if choice in range(1,len(movie_list)+1): # 判断是否在列表元素个数范围内 # # 获取用户想要看的文件名 # target_file = movie_list[choice-1] # # 拼接文件绝对路径 # target_path = os.path.join(MOVIE_DIR,target_file) # with open(target_path,'r',encoding='utf-8') as f: # print(f.read()) # os.mkdir('tank老师精选') # 自动创建文件夹 # print(os.path.exists(r'D:\Python项目\day16\rion老师精选')) # 判断文件是否存在 # print(os.path.exists(r'D:\Python项目\day16\老师们的作品\tank老师.txt')) # 判断文件是否存在 # print(os.path.isfile(r'D:\Python项目\day16\tank老师精选')) # 只能判断文件 不能判断文件夹 # print(os.path.isfile(r'D:\Python项目\day16\老师们的作品\tank老师.txt')) # 只能判断文件 不能判断文件夹 # os.rmdir(r'D:\Python项目\day16\老师们的作品') # 只能删空文件夹 # print(os.getcwd()) # print(os.chdir(r'D:\Python项目\day16\老师们的作品')) # 切换当前所在的目录 # print(os.getcwd()) # 获取文件大小 # print(os.path.getsize(r'D:\Python项目\day16\老师们的作品\tank老师.txt')) # 字节大小 # with open(r'D:\Python项目\day16\老师们的作品\tank老师.txt',encoding='utf-8') as f: # print(len(f.read()))
sys 跟python解释器打交道的模块
import sys # sys.path.append() # 将某个路径添加到系统的环境变量中 # print(sys.platform) # print(sys.version) # python解释器的版本 print(sys.argv) # 命令行启动文件 可以做身份的验证 if len(sys.argv) <= 1: print('请输入用户名和密码') else: username = sys.argv[1] password = sys.argv[2] if username == 'jason' and password == '123': print('欢迎使用') # 当前这个py文件逻辑代码 else: print('用户不存在 无法执行当前文件')
python序列化 2大模块 --->
序列化的目的 1、以某种存储形式使自定义对象持久化; 2、将对象从一个地方传递到另一个地方。 3、使程序更具维护性。
json 万能语言的交流大使
import json
dic1 = {'A' : 'a', 'B' : 'b', 'C' : 'c'}
# 转化成字符串 , json字符串符号都为 " " ,python自身的为 ' ' ,会将其转化
str_dic = json.dumps(dic1)
print(str_dic, type(str_dic))
转化json字符串为字典形式 ,又称反序列化
ps:
#注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
dic2 = json.loads(str_dic)
print(dic2, type(dic2))