基本データ型
STR(文字列)
STR:ライン上で再び練習する補完的な方法
s.capitalize()最初の文字は大文字と小文字に残り
s = 'dyLAn' print(s.capitalize()) # Dylan
s.swapcase()ケースフリップ
s = 'dYLAN' print(s.swapcase()) # Dylan
s.title()は大文字各単語の(単語または数字間に特殊文字とスペースであってもよいです)
s = 'dylan is good man' print(s.title()) # Dylan Is Good Man
s.center()センター
s = 'dylan' print(s.center(20)) # dylan (默认是空格填充) print(s.center(20, '@')) # @@@@@@@dylan@@@@@@@@
s.find()要素によってインデックスを見つけるためには、繰り返される場合は、まず、見つからないリターン「1」を見つけるために戻ります
s = 'dylan' print(s.find('a')) # 3 print(s.find('b')) # -1
s.index()は、エラーを見つけることができ、重複がある場合、最初の戻りを見つけ、要素を索引を検索します
s = 'dylan' print(s.index('a')) # 3 print(s.index('b')) # 报错 # 报错如下: Traceback (most recent call last): File "/Users/yaoyaoba/Full_stack_22/day07/练习.py", line 8, in <module> print(s.index('b')) ValueError: substring not found
タプル(タプル)
唯一のタプル要素は、無コンマがない場合、それはタプルではない、それは要素のデータ型と一致しています。
tu = (2, 3, 4) print(tu, type(tu)) # (2, 3, 4) <class 'tuple'> tu = (2) print(tu, type(tu)) # 2 <class 'int'> tu = ('Dylan') print(tu, type(tu)) # Dylan <class 'str'> tu = ([1, 2, 3]) print(tu, type(tu)) # [1, 2, 3] <class 'list'>
tu.count()統計の数組に現れる要素
tu = (1, 2, 3, 3, 3, 2, 2, 3,) print(tu.count(3)) # 3
tu.index()重複がある場合、要素を通ってインデックスを見つける最初の戻りを見つけます
tu = (1, 2, 3, 3, 3, 2, 2, 3,) print(tu.index(3)) # 2
リスト(一覧)
li.count()要素の統計情報がリストに表示された回数
li = ['q', 'w', 'e', 'w', 'e', 'r', 't', 'y'] print(li.count('w')) # 2
li.index()リストから最初のマッチのインデックス値の位置を見つける(エラーを見つけることができません)
li = ['Dylan', 'yaoyao', 'man', 'girl', 'man'] print(li.index('Dylan')) # 0 print(li.index('aa')) # 报错
li.sort()元の場所にリストをソートします
li = [3, 4, 2, 5, 7, 9, 8, 1] li.sort() # 它没有反回值,所以只能打印 li print(li) # [1, 2, 3, 4, 5, 7, 8, 9] li.sort(reverse=True) # 加个参数 就变成从大到小排序了. print(li) # [9, 8, 7, 5, 4, 3, 2, 1]
li.reverse()リストのソート要素が逆になります
li = [3, 4, 2, 5, 7, 9, 8, 1] li.reverse() # 它没有反回值,所以只能打印 li print(li) # [1, 8, 9, 7, 5, 2, 4, 3]
リスト合計
l1 = [3, 4, 2, 5, 7, 9, 8, 1] l2 = ['Dylan', 'yaoyao', 'man', 'girl', 'man'] print(l1 + l2) # [3, 4, 2, 5, 7, 9, 8, 1, 'Dylan', 'yaoyao', 'man', 'girl', 'man']
リストを掛けます
l1 = [3, 4, 2, 5, 7, 9, 8, 1] l2 = l1 * 3 print(l2) # [3, 4, 2, 5, 7, 9, 8, 1, 3, 4, 2, 5, 7, 9, 8, 1, 3, 4, 2, 5, 7, 9, 8, 1]
関連演習
li = [3, 4, 2, 5, 7, 9, 8, 1] # 索引为奇数对应的元素删除(不能一个一个删除,此l1只是举个例子,里面的元素不定)。 # 正常思路: # 先将整个列表的索引整出来。 for index in range(len(li)): if index % 2 == 1: li.pop(index) print(li) # 会报错,因为超出了索引范围 # 最简单的方法 li = [3, 4, 2, 5, 7, 9, 8, 1] del li[1: :2] # 通过切片删 print(li) # [3, 2, 7, 8] # 倒着删 for index in range(len(li)-1,-1,-1): if index % 2 == 1: li.pop(index) print(li) # [3, 2, 7, 8] # 思维置换 li = [3, 4, 2, 5, 7, 9, 8, 1] new_li = [] for index in range(len(li)): if index % 2 = 0: new_li.append(l1[index]) l1 = new_li print(li) # [3, 2, 7, 8] # 总结: # 循环一个列表时,最好不要改变原列表的大小,这样会影响你的最终结果。
辞書(辞書)
dic.popitem()バージョン3.5の前に、最後を削除するには3.6の後、ランダム削除をpopitem、戻り値があります
dic = {'name': 'Dylan', 'age': 16} ret = dic.popitem() print(ret,dic) # ('age', 16) {'name': 'Dylan'}
dic.update()更新または増加する(非常に重要)を
# 直接增加键值对 dic = {'name': 'Dylan', 'age': 16} dic.update(sex = '男', height = 178) print(dic) # {'name': 'Dylan', 'age': 16, 'sex': '男', 'height': 178} # 更新己有键值对 dic = {'name': 'Dylan', 'age': 16} dic.update(age=33) print(dic) # {'name': 'Dylan', 'age': 33} # 元组拆包增加键值对 (面试会考) dic = {'name': 'Dylan', 'age': 16} dic.update([(1, 'a'), (2, 'b'), (3, 'c')]) print(dic) # {'name': 'Dylan', 'age': 16, 1: 'a', 2: 'b', 3: 'c'} # 更新,有则覆盖,无则添加 dic = {'name': 'Dylan', 'age': 16} dic1 = {'age': 33, 'sex': 'man'} dic.update(dic1) print(dic) # {'name': 'Dylan', 'age': 33, 'sex': 'man'}
dic.fromkeys()共通の値と反復可能からキー
dic = dict.fromkeys('abc', 100) print(dic) # {'a': 100, 'b': 100, 'c': 100} 注意这里的值是共用的一个 id dic = dict.fromkeys([1, 2, 3], 'Dylan') print(dic) # {1: 'Dylan', 2: 'Dylan', 3: 'Dylan'} # 这有个坑,注意,面试题 dic = dict.fromkeys([1, 2, 3], []) print(dic) # {1: [], 2: [], 3: []} dic[1].append(123) # 因为是共用的值,所以改变一个,其它的也都会变 print(dic) # {1: [123], 2: [123], 3: [123]}
演習
# 将字典中键含有'k'元素的键值对删除。 dic = {'k1': 'Dylan', 'k2': 'xian', 'k3': '男', 'age': 14} # 入坑思路: dic = {'k1': 'Dylan', 'k2': 'xian', 'k3': '男', 'age': 14} for key in dic: if 'k' in key: dic.pop(key) print(dic) # 报错了 # 注意:循环一个字典时,如果改变这个字典的大小,就会报错,这是坑。 # 换个思路,我们把循环出来带有'k'的键放到一个列表中,再用列表循环删字典里的键 dic = {'k1': 'Dylan', 'k2': 'xian', 'k3': '男', 'age': 14} li = [] for key in dic: if 'k' in key: li.append(key) for i in li: dic.pop(i) print(dic) # {'age': 14} # 再来个简单的 dic = {'k1': 'Dylan', 'k2': 'xian', 'k3': '男', 'age': 14} for key in list(dic.keys()): # {'k1': 'Dylan', 'k2': 'xian', 'k3': '男', 'age': 14} if 'k' in key: dic.pop(key) print(dic) # {'age': 14}
データ型の変換
現在、学習データの種類:int型/ブール/ STR /リスト/タプル/ dictの/セット、これらのデータ型の間では相互に変換することができ、そしていくつかの変換は非常に重要な、といくつかの基本的な必要性です。
int型/ブール/ STR 3つの変換の間で
# int ----> bool i = 100 print(bool(i)) # True 非零即 True i1 = 0 print(bool(i1)) # False 零即是 False # bool ----> int t = True print(int(t)) # 1 True = 1 f = False print(int(f)) # 0 False = 0 # int ----> str i = 100 print(str(i)) # '100' # str ----> int 全部由数字组成的字符串才可以转化成数字 s = '90' print(int(s)) # 90 # str ----> bool s1 = 'Dylan' s2 = '' print(bool(s1)) # True 非空即 Treu print(bool(s2)) # False # bool ----> str # 没有什么实际意义 t1 = True t2 = False print(str(t1)) # True print(str(t2)) # False
STR /リストの両方の変換
# str ----> list s = 'Dylan is good man' print(s.split()) # ['Dylan', 'is', 'good', 'man'] # list ----> str li = ['Dylan', 'is', 'good', 'man'] print(' '.join(li)) # Dylan is good man
リスト/セット変換の両方
# list ----> set li = ['Dylan', 'is', 'good', 'man'] print(set(li)) # {'is', 'Dylan', 'good', 'man'} # set ----> list set1 = {'is', 'Dylan', 'good', 'man'} print(list(set1)) # ['Dylan', 'good', 'man', 'is'] 注意转换过来的是无序的
STR /バイトの両方の変換
# str ----> bytes s = '海洋' print(s.encode('utf-8')) # b'\xe6\xb5\xb7\xe6\xb4\x8b' # bytes ----> str b = b'\xe6\xb5\xb7\xe6\xb4\x8b' print(b.decode('utf-8')) # 海洋
すべてのデータは、ブール値に変換することができます
'', 0, (), {}, [], set(), None
基本データ型の概要
占有収納スペースを区別することにより、(低〜高)
数字 字符串 集合:无序,即无序存索引相关信息 元组:有序,需要存索引相关信息,不可变 列表:有序,需要存索引相关信息,可变,需要处理数据的增删改 字典:有序,需要存key与value映射的相关信息,可变,需要处理数据的增删改(3.6之后有序)
格納された値の数で区別
スカラ/アトムタイプ 数値、文字列 コンテナタイプ リスト、タプル、辞書 変数不変で区別
変数 リスト、辞書 不変 数値、文字列、タプル、ブール 区別するためにアクセス
直接アクセス デジタル シーケンシャルアクセス(シーケンスタイプ) 文字列、リスト、タプル アクセスキーの値(マッピングタイプ) 辞書
コーディング高度な
- ASCIIコード:文字、数字、特殊文字と01010101の対応が含まれています。
01000001 1バイト文字。
- GBKは:のみ国語(英語の文字、数字、特殊文字)0101010の対応関係が含まれています。
01000001 ASCIIコードの文字:1バイトで表現される文字。
2バイト文字表記:0,100,100,101,000,010中国で。
- Unicodeは:テキストとバイナリ0101001の世界との間のすべての通信が含まれています。
01000001 01000010 01000011 00000001
01000001 01000010 01100011 00000001 B
0,100,100,101,000,010 0,110,001,100,000,001で
- UTF-8:(表し8バイト文字の最小値を持つ)テキストとバイナリ0101001の世界との間のマッピングが含まれています。
01000001 ASCIIコードの文字:1バイトで表現される文字。
2バイト文字表記:01000001 01000010(などポルトガル語、スペイン語、ヨーロッパ言語)へ。
0,100,100,101,000,010で01100011アジアの文字、文字3バイト。
互いに異なる暗号を認識しません。
すべてのUnicodeでエンコードされ、メモリ内のデータが、ネットワーク伝送用またはハードディスクに格納されたデータが非Unicodeエンコーディング(UTF-8、GBKなど)でなければならない場合。
英文:
STR: 'こんにちは'
エンコーディングメモリ:ユニコード
症状:「こんにちは」
バイト:
エンコードメモリ:非Unicode
式:b'hello "
中文:
STR:
エンコーディングメモリ:ユニコード
式:「中国」
バイト:
エンコードメモリ:非Unicode#UTF-8
フォーム:B '\ xe4 \ xb8 \ XAD \ xe5 \ x9b \ XBD'
# str ---> bytes s1 = '中国' b1 = s1.encode('utf-8') # 编码 print(b1,type(b1)) # b'\xe4\xb8\xad\xe5\x9b\xbd' #b1 = s1.encode('gbk') # 编码 # b'\xd6\xd0\xb9\xfa' <class 'bytes'> # bytes---->str b1 = b'\xe4\xb8\xad\xe5\x9b\xbd' s2 = b1.decode('utf-8') # 解码 print(s2)
# gbk ---> utf-8 b1 = b'\xd6\xd0\xb9\xfa' s = b1.decode('gbk') # print(s) b2 = s.encode('utf-8') print(b2) # b'\xe4\xb8\xad\xe5\x9b\xbd'