実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある
"""
演習1(forのネスト)
1から31までの整数を要素とするリスト1と,1から12までの整数を要素とするリスト2を作成します.リスト1とリスト2から値を1つずつ取ってきた時,1の位が一致する値が何組あるかを求めてください.例えば,1と11は,1の位が両方1なので,カウントに入ります.1と1,31と1なども同様です.
期待する出力:38
演習2(辞書の値ソート)
辞書が以下のように定義されています.
dic = {'two':324, 'four':830, 'three':493, 'one':172, 'five':1024}
この時,値で昇順ソートしたと考えた場合のキーの並びを出力してください.
期待する出力:['one', 'two', 'three', 'four', 'five']
演習3(num2freq)
リストが以下のように定義されています.
nums = [1,2,4,3,2,1,5,1]
このリストに対して,要素の出現数を格納した辞書num2freqを作成し,出力してください.これはnum2freq[要素] = 出現数となるような辞書で,例えばnum2freq[1] = 3です.
期待する出力:{1: 3, 2: 2, 4: 1, 3: 1, 5: 1}
演習4(word2freq)
今,文字列が以下のように与えられています.
doc = 'i bought an apple .\ni ate it .\nit is delicious .'
\nは改行記号なので,3つの文が3行に渡って書かれていることになります.
この文章中の単語を用いて,キーとして単語,値として出現数を持つような辞書word2freqを作成し,出力してください.ただし,改行記号は単語に含めないでください.
ヒント:改行記号でsplitしてから空白でsplitすれば,単語に分割できます.
期待する出力:{'i': 2, 'bought': 1, 'an': 1, 'apple': 1, '.': 3, 'ate': 1, 'it': 2, 'is': 1, 'delicious': 1}
演習5(Jaccard係数)
2つの集合A,Bの類似度を計算する方法として,Jaccard係数というものがあります.例えば,文章の類似度の指標として使われています.
Jaccard(A,B)=|A∩B||A∪B|=AとBの積集合の要素数AとBの和集合の要素数
2つのリストが以下のように与えられている時,リストを集合と見なした時のJaccard係数の値を求めてください.
list1 = [12,23,34,45,56,67,78,89]
list2 = [21,32,43,45,65,67,78,98]
期待する出力:0.23076923076923078
"""
#
#
#演習1(forのネスト)
#
print("演習1(forのネスト)")
#
l1 = list(range(1,32))
l2 = list(range(1,13))
#print(l1)
#print(l2)
cnt = 0
for item1 in l1:
for item2 in l2:
if item1 % 10 == item2 % 10:
# print(item1,item2)
cnt += 1
print(cnt)
#
#演習2(辞書の値ソート)
#
print("演習2(辞書の値ソート)")
#
dic = {'two':324, 'four':830, 'three':493, 'one':172, 'five':1024}
item = list(dic.items())
#print(item)
x = sorted(item, key=lambda x:x[1])
#print(x)
q = [i[0] for i in x]
print(q)
#
#演習3(num2freq)
#
print("演習3(num2freq)")
#
nums = [1,2,4,3,2,1,5,1]
num2freq = {}
for i in nums:
num2freq[i] = num2freq.get(i, 0) + 1
# print(num2freq[i])
print(num2freq)
#
#演習4(word2freq)
#
print("演習4(word2freq)")
#
doc = 'i bought an apple .\ni ate it .\nit is delicious .'
word2freq = {}
x1 = doc.split('\n')
#print(x1)
for x in x1:
words = x.split()
# print(words)
for word in words:
word2freq[word] = word2freq.get(word, 0) + 1
print(word2freq)
#
#演習5(Jaccard係数)
#
print("演習5(Jaccard係数)")
#
list1 = [12,23,34,45,56,67,78,89]
list2 = [21,32,43,45,65,67,78,98]
a = set(list1)
b = set(list2)
inter_set = a.intersection(b)
union_set = a.union(b)
print(len(inter_set) / len(union_set))