2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

タプル・辞書や、それを用いたラムダ式など

Last updated at Posted at 2018-08-27

 タプル

タプルとはリストと同様に複数の値を1個の値として扱えるようになります。しかし、リストと異なり、 作成した後に要素の追加や削除ができない点に注意してみてください。

タプルを作成するには、tuple()の形を活用します。

x = tuple(range(0, 10, 2))

タプルにインデックス番号を付けてみましょう。その際は、enumerateを使用します。

tap = (1, 2, 3, 4, 5) 
for i, x in enumerate(tap, 1):
    print(i, x)

出力結果
1 1
2 2
3  3
4  4
5  5

 セット

ここでは、セットを用いてリストの重複を削除する方法を記述します。

a = [3,1,2,3,4,5]
b = [2,4,6,8,2]

まずセットに変換しましょう!

a_set = set(a)
b_set = set(b)

a_setにb_setを合わせ、list()でリスト化します。

a_set |= b_set
print(list(a_set))

出力結果
[1, 2, 3, 4, 5, 6, 8]

次は、先ほどのリストをリスト内方表記で作成してみましょう。また、リスト要素を降順にします。

list_a = [x for x in list(set(a) | set(b)) if x % 2 != 0]
list_a.sort()

print(list_a)

出力結果
[1, 3, 5]

 dict (辞書)

辞書は、左にkeyを持ち、右にvalueを持っているセットの事を言います。
早速作ってみましょう。まずzip()の使用方法を確認してみましょう。

keys = [1, 2, 3]
values = [2, 4, 6]
data = dict(zip(keys, values))
print(data)
print(data[1])

出力結果
{1: 2, 2: 4, 3: 6}
2

updateも使用頻度の高いメソッドです。

data1 = {"a": 1, "b": 2, "c": 3}
data2 = {"a": 1, "d": 4}
data1.update(data2)
print(data1)
print(len(data1))

出力結果
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
4

バリューの合計値は以下のように示します。

x = {1:2, 2:4, 3:6}
print(sum(x.values()))

出力結果
12

リストの要素をkeyとし、値は各要素の2倍のdictを作れ

key = [1,2,3]
values = [keys*2 for keys in key]
data = dict(zip(keys, values))
print(data)
出力結果
{1: 2, 2: 4, 3: 6}

dict.fromkeysは便利なメソッドです。以下の場合は、バリューが全て、1と指定されます。

data = dict.fromkeys(key, 1)
print(data)
出力結果
{1: 1, 2: 1, 3: 1}

以下のkeys,valuesのリストからdictを作ってみましょう。

keys = [1,2,3,4,5]
values = [2,4,6,8,10]
data = dict(zip(keys, values))
print(data)

出力結果
{1: 2, 2: 4, 3: 6, 4: 8, 5: 10}

【応用です。】
.items()で辞書の中の、key, valueを取り出すことが出来ます。

keyが2の倍数の時のvalueの値の合計を求めよ

di = {1:2, 2:4, 3:6, 4:8}

total = 0

for key, value in di.items() :
    if int(key) % 2 == 0 :
        total += value
        
print(total)

出力結果
12

 クロージャー関数

クロージャー関数とは、関数が2重構造になっており、1つ目の関数を実行すると、中の関数を返すような仕組みの関数である。

 ラムダ式

ラムダ式は非常に使用頻度が高く、また使い捨て関数として、多用できます。是非、書けるようにしてみましょう。

text =(lambda  x: "{}!".format(x)) ("こんにちは") #後ろの()に引数を取ります。
print(text)

出力結果
こんにちは

 ソート関数

ソートする際に、関数名で指定すること、でソートを行うことが出来ます。

def func(x):
    keys = {
    "こ": 4,
    "ん": 3,
    "に": 2,
    "ち": 1,
    "は": 0
    }
    return keys[x]

data = list("こんにちは")
data.sort(key = func)
print(data)

出力結果
['は', 'ち', 'に', 'ん', 'こ']

はじめに渡した引数をタグとして括って返してくれるクロージャ関数を作れ
例: "html"を渡して作った関数に123を渡すと123として返してくれる
例: "body"を渡して作った関数に"abc"を渡すと

abcとして返してくれる
def tag_func(a):
    def tag_make(x) :
        return "<{}>{}</{}>".format(a,x,a)
    return tag_make

tag_func("html")(123)
tag_func("body")(123)

出力結果
'<body>123</body>'

これをラムダ式で書き表すとこうなります。

text= (lambda a, x : "<{}>{}</{}>".format(a,x,a))("html", 123)
print(text)
出力結果
<html>123</html>

7倍した時の一の位の数字で並べ替えよ
例:4,5→ 28,35 よって 8と5なので、4,5は5,4と並び替えられる

data = [1,2,3,4,5,6,7,8,9]

def func(x) :
    return int(str(x*7)[-1])
data.sort(key=func)
print(data)
[3, 6, 9, 2, 5, 8, 1, 4, 7]

 mapとfilter

def double(x):
    return x * 2

data = [1,2,3,4,5]
double_list = list(map(double,data))
print(double_list)

ラムダ式で書き表すとこうなる

data = [1,2,3,4,5]

double_list = list(map(lambda x : x*2 , data))
print(double_list)

filter

data = [1,2,3,4,5]
picked = list(filter(lambda x : x % 2 == 0, data))
print(picked)

本日はここまでお疲れ様でした!

2
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?