【pythonラーニング】辞書、集合、シーケンス
45605 ワード
一、辞書
辞書はC++のSTLテンプレートのmapに似たマッピングと理解できる.
例えば、整形配列は、数値から数値へのマッピングを確立し、文字列配列は、数値から文字列へのマッピングを確立する.辞書はより広範なマッピングを確立することができます.たとえば、文字列から数値へのマッピング、元祖から文字列へのマッピングを確立できます.
マッピングには、キー(key)と値(value)のペアがあり、キーはインデックスに使用され、値は格納されたオブジェクトです.たとえば、文字列配列のキーは数値であり、値は文字列です.この一対のキー値は、辞書の基本要素を二元グループ(key,value)として構成する.pythonでは、キーは数字、文字列、元祖などの可変タイプのみで、リストのような可変タイプは取れません.値は任意のタイプをとることができます.
辞書はカッコ{}で表され、キー値の間にはコロン:区切りがあります.次のようになります.
練習問題
1、辞書の基本操作辞書の内容は以下の通りである.
プログラムで次の質問に答えます.辞書の長さはいくらですか java’というkeyに対応するvalue値を98 に変更してください. cこのkey を削除 key-valueペアを追加し、key値はphp、valueは90 です.はすべてのkey値を取得し、リストに を格納する.すべてのvalue値を取得し、リストに を格納する javascriptが辞書の にあるかどうかを判断する辞書のvalueのすべてと を取得辞書で最大のvalue を取得辞書の最小value を取得辞書dic 1={‘php’:97}、dic 1のデータをdicに更新する 分析:主にリストの基本操作を考察し、コードは以下の通りである.
2、辞書のvalue
学生の各プログラミング言語の成績、内容を以下のように保存する辞書があります.
各科目の試験成績の格納方法は異なります.辞書を使う人もいれば、リストを使う人もいますが、点数は文字列タイプです.関数transferを実現してください.score(score_dict)、スコアをintタイプに変更
構想:再帰思想を用いて,伝達関数データ型の違いに基づいて分類して議論する.再帰境界が入力データのタイプが文字列である場合、文字列をintタイプに変更して値を返します. 文字列は数字ではない可能性があるので、プログラムの異常終了を防ぐために異常処理で特判する必要があります. 受信データのタイプが辞書またはリストである場合、その各要素を巡回し、この関数を再帰的に呼び出す.戻り値を各要素に割り当てます.
実行結果は次のとおりです.
二、集合
コレクションは、インデックスがなく、各要素が重複しないことを特徴とするデータを格納するコンテナです.これは数学の概念と似ており,ここでは後述しない.
集合もカッコ{}で表されますが、キー値の概念はありません.次のようになります.
練習問題
1.数値1のみを含むタプルをどのように表示しますか.
考え方:元祖をカッコで表す
2.空の集合を作成し、{‘x’,‘y’,z’}の3つの要素を追加します.
3.リスト[‘A’,‘B’,‘A’,‘B’]を削除します.
考え方:setを利用して重さを取り除く
4.2つの集合{6,7,8},{7,8,9}の中で重複しない要素を求める(差集合は2つの集合の交差外の部分を指す).
構想:これは2つの集合の異論または結果を求める.集合AとBに対して,A^B=(A−B)〜(B−A)
5.「A」、「B」、「C」の要素が「B」、「C」、「D」に現れる回数を求める.
output: 2
三、シーケンス
文字列、リスト、元祖は、整数インデックスを使用できるため、シーケンスとして計算できます.
練習問題
1.どのようにしてシーケンスの最大、小値を見つけますか?
max()、min()関数を使用して、次のように使用します.
コード1(デジタルシーケンス)
コード2(文字列型シーケンス)
コード3(単一文字列、文字シーケンスとして理解可能)
2.sort()とsorted()の違い
シーケンスlstにとってlst.sort()は、元のシーケンスlstを直接シーケンスし、戻り値がない操作です.一方sortedは関数であり、その戻り値は順序付けされたシーケンスであるが、元のシーケンスlstは変わらない.使用法はsorted(lst)
3.どのように速く1から100までのすべての整数の加算の和を求めますか?
構想:sum()関数で直接和を求め,ここで伝達関数のシーケンスはrange()関数で生成する.
4.リスト[2,3,4,5]の各要素の立方根を求める.
output: 1.26 1.44 1.59 1.71
5.[‘x’,‘y’,‘z’]および[1,2,3]を[(‘x’,1),(‘y’,2),(‘z’,3)]の形式に変換する.
構想:zip()関数を使用して、2つのシーケンスをそれぞれ2元グループの形式に結合します.
辞書はC++のSTLテンプレートのmapに似たマッピングと理解できる.
例えば、整形配列は、数値から数値へのマッピングを確立し、文字列配列は、数値から文字列へのマッピングを確立する.辞書はより広範なマッピングを確立することができます.たとえば、文字列から数値へのマッピング、元祖から文字列へのマッピングを確立できます.
マッピングには、キー(key)と値(value)のペアがあり、キーはインデックスに使用され、値は格納されたオブジェクトです.たとえば、文字列配列のキーは数値であり、値は文字列です.この一対のキー値は、辞書の基本要素を二元グループ(key,value)として構成する.pythonでは、キーは数字、文字列、元祖などの可変タイプのみで、リストのような可変タイプは取れません.値は任意のタイプをとることができます.
辞書はカッコ{}で表され、キー値の間にはコロン:区切りがあります.次のようになります.
>>> dic = {
"name":"Tom", 'age':12,'love':'girl'}
>>> type(dic)
<class 'dict'>
練習問題
1、辞書の基本操作辞書の内容は以下の通りである.
dic= {
'python': 95,
'java': 99,
'c': 100
}
プログラムで次の質問に答えます.
>>> dic
{
'python': 95, 'java': 99, 'c': 100} #
>>> len(dic) #
3
>>> dic['java'] = 98 # 'java' key value 98
>>> dic
{
'python': 95, 'java': 98, 'c': 100}
>>> del dic['c'] # c key
>>> dic
{
'python': 95, 'java': 98}
>>> dic['php'] = 90 # key-value 、 key php,value 90
>>> dic
{
'python': 95, 'java': 98, 'php': 90}
>>> lst = list(dic.keys()) # key ,
>>> lst
['python', 'java', 'php']
>>> lst = list(dic.values()) # value ,
>>> lst
[95, 98, 90]
>>> 'javascript' in dic # javascript
False
>>> sum(dic.values()) # value
283
>>> max(dic.values()) # value
98
>>> min(dic.values()) # value
90
>>> dic1 = {
'php': 97} # dic1 dic
>>> dic.update(dic1)
>>> dic
{
'python': 95, 'java': 98, 'php': 97}
2、辞書のvalue
学生の各プログラミング言語の成績、内容を以下のように保存する辞書があります.
data = {
'python':{
' ': '90', ' ': '95'},
'c++': ['95', '96', '97'],
'java': [{
' ':'90', ' ': '94', ' ': '98'}]
}
各科目の試験成績の格納方法は異なります.辞書を使う人もいれば、リストを使う人もいますが、点数は文字列タイプです.関数transferを実現してください.score(score_dict)、スコアをintタイプに変更
構想:再帰思想を用いて,伝達関数データ型の違いに基づいて分類して議論する.
def transfer_score(data):
if type(data) == str: #
try:
data = int(data)
except ValueError: #
pass
elif type(data) == dict:
for i in data: #
data[i] = transfer_score(data[i]) # ,
elif type(data) == list:
for i in range(len(data)): #
data[i] = transfer_score(data[i])
return data # data
data = {
'python':{
' ': '90', ' ': '95'},
'c++': ['95', '96', '97'],
'java': [{
' ':'90', ' ': '94', ' ': '98'}]
}
print(data)
transfer_score(data)
print('
' + '*' * 30 + ' ' + '*' * 30 + '
')
print(data)
実行結果は次のとおりです.
output:
{
'python': {
' ': '90', ' ': '95'}, 'c++': ['95', '96', '97'], 'java': [{
' ': '90', ' ': '94', ' ': '98'}]}
****************************** ******************************
{
'python': {
' ': 90, ' ': 95}, 'c++': [95, 96, 97], 'java': [{
' ': 90, ' ': 94, ' ': 98}]}
二、集合
コレクションは、インデックスがなく、各要素が重複しないことを特徴とするデータを格納するコンテナです.これは数学の概念と似ており,ここでは後述しない.
集合もカッコ{}で表されますが、キー値の概念はありません.次のようになります.
>>> s = {
1, 2, 2, 3, 5}
>>> s
{
1, 2, 3, 5} # ,
>>> type(s)
<class 'set'>
練習問題
1.数値1のみを含むタプルをどのように表示しますか.
考え方:元祖をカッコで表す
>>> tu = (1,)
>>> tu
(1,)
>>> type(tu)
<class 'tuple'>
2.空の集合を作成し、{‘x’,‘y’,z’}の3つの要素を追加します.
>>> s = set()
>>> s.add('x')
>>> s.add('y')
>>> s.add('z')
>>> s
{
'x', 'z', 'y'}
>>> type(s)
<class 'set'>
3.リスト[‘A’,‘B’,‘A’,‘B’]を削除します.
考え方:setを利用して重さを取り除く
>>> lst = list(set(['A', 'B', 'A', 'B']))
>>> lst
['B', 'A']
4.2つの集合{6,7,8},{7,8,9}の中で重複しない要素を求める(差集合は2つの集合の交差外の部分を指す).
構想:これは2つの集合の異論または結果を求める.集合AとBに対して,A^B=(A−B)〜(B−A)
>>> s1 = {
6, 7, 8}
>>> s2 = {
7, 8, 9}
>>> s = s1 ^ s2
>>> s
{
9, 6}
5.「A」、「B」、「C」の要素が「B」、「C」、「D」に現れる回数を求める.
res = 0
s1 = {
'A', 'B', 'C'}
s2 = {
'B', 'C', 'D'}
for i in s1:
if i in s2:
res += 1
print(res)
output: 2
三、シーケンス
文字列、リスト、元祖は、整数インデックスを使用できるため、シーケンスとして計算できます.
練習問題
1.どのようにしてシーケンスの最大、小値を見つけますか?
max()、min()関数を使用して、次のように使用します.
コード1(デジタルシーケンス)
>>> lst = [2, 3, 4, 5, 1, -6]
>>> min(lst)
-6
>>> max(lst)
5
>>> type(min(lst)) # int()
<class 'int'>
>>> lst.append(-9.63) #
>>> lst
[2, 3, 4, 5, 1, -6, -9.63]
>>> type(min(lst)) # , int float
<class 'float'>
>>> type(max(lst))
<class 'int'>
コード2(文字列型シーケンス)
>>> lst = ['fef', '55', 'haha']
>>> lst
['fef', '55', 'haha']
>>> min(lst)
'55'
>>> max(lst)
'haha'
>>> type(min(lst))
<class 'str'>
コード3(単一文字列、文字シーケンスとして理解可能)
<class 'str'>
>>> max('abcdABCD')
'd'
>>> type(max('abcdABCD'))
<class 'str'>
2.sort()とsorted()の違い
シーケンスlstにとってlst.sort()は、元のシーケンスlstを直接シーケンスし、戻り値がない操作です.一方sortedは関数であり、その戻り値は順序付けされたシーケンスであるが、元のシーケンスlstは変わらない.使用法はsorted(lst)
>>> print(sorted(lst))
['55', 'fef', 'haha']
>>> print(lst.sort())
None
3.どのように速く1から100までのすべての整数の加算の和を求めますか?
構想:sum()関数で直接和を求め,ここで伝達関数のシーケンスはrange()関数で生成する.
>>> sum(range(1, 101))
5050
4.リスト[2,3,4,5]の各要素の立方根を求める.
lst = [2,3,4,5]
for i in lst:
if i != lst[-1]:
print('%.2f' % (i ** (1 / 3)), end = ' ')
else:
print('%.2f' % i ** (1 / 3))
output: 1.26 1.44 1.59 1.71
5.[‘x’,‘y’,‘z’]および[1,2,3]を[(‘x’,1),(‘y’,2),(‘z’,3)]の形式に変換する.
構想:zip()関数を使用して、2つのシーケンスをそれぞれ2元グループの形式に結合します.
>>> a = ['x','y','z']
>>> b = [1,2,3]
>>> a, b
(['x', 'y', 'z'], [1, 2, 3])
>>> list( zip(a, b) ) #zip list
[('x', 1), ('y', 2), ('z', 3)]