★Pythonはすべてがオブジェクトである


◆4つのデータ構造について

  • リストとタプルは順序付きでデータを表したいときに適している。 
  • 辞書と集合はデータを格納する順番ではなく、構造が重要な場合に用いる。

リスト

配列に近い。動的にオブジェクトの追加(append)、削除(remove,pop)、変更可能()。例えば1か月の気温の測定値など。

タプル

不変のリスト。タプルにオブジェクトを割り当てたらどのような状況でも変更不可。固定リスト。

辞書

キーと値のペアの順序無しリスト。2列の複数行データ構造と考える。可変。

集合

重複のない順序無しリスト。可変。


まずはリストについて

num = [0,1,2,3,4]
num.append(5)
>>>[0,1,2,3,4,5]

num.remove(5)
>>>[0,1,2,3,4]

num.pop()
>>>[0,1,2,3]
#指定しない場合はリストの末尾の要素を取り出す

num.pop(0)
>>>[1,2,3]
#1番目のオブジェクトを取り出す

num.extend([4,5])
>>>[1,2,3,4,5]
#appendが一つに対してextendはリストに動的にデータを追加できる

num.insert(0,6)
>>>[6,1,2,3,4,5]
#リストの任意の場所にオブジェクトを追加できる

「Don’t panic!」という文言を「on tap」に変更する場合

phrase = "Don't panic!"
plist = list(phrase)

for i in range(4):
    plist.pop()
plist.pop(0)
plist.move("'")
plist.extend([plist.pop(),plist.pop()])
plist.insert(2,plist.pop(3))

リストのコピーについて

代入演算子を使わず、copyメソッドを使う

first = [1,2,3,4,5]
second = first
second.append(6)
>>>second
[1,2,3,4,5,6]
>>>first
[1,2,3,4,5,6]
#一方のリストを更新すると、もう一方も変更される

third = second.copy()
third.append(7)
>>>third
[1,2,3,4,5,6,7]
>>>second
[1,2,3,4,5,6]

リストへのアクセス

他のプログラミング言語とは異なり、pythonでは末尾から相対的にリストにアクセスできる

first = [1,2,3,4,5]
>>>first[1]
2
>>>first[-1]
5

リストの開始、終了、刻み

#letters[開始:終了:刻み]

>>>saying = "Hello World!"
>>> letters = list(saying)
>>> letters[-1]
'!'
>>> letters
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!']
>>> letters[0:10:3]
['H', 'l', 'W', 'l']
>>> letters[::2]
['H', 'l', 'o', 'W', 'r', 'd']

リストからスライスする

Don’t panic! を on tap に変換する6.py

phrase = "Don't panic!"
plist = list(phrase)

#まずonをスライスし
new_phrase = ''.join(plist[1:3])

#追加する各文字を選ぶ
new_phrase = new_phrase + ''.join([plist[5],plist[4],plist[7],plist[6]])

スライスをforで行う

word = "Hello World!"
letters = list(word)

for char in letters[:6]:
    print(char)
>>>Hello

for char in letters[:-6]:
    print(char)
>>>World!

for char in letters[6:5]:
    print(char)

辞書について

person1 = {'名前': 'shoko',
           '性別': 'female',
           '職業': '会社員',
           '出身地': '埼玉県'}

person1['出身地']
>>>'埼玉県'

person1['名前']
>>>'shoko'
辞書を反復処理する
for k, v in sorted(found.items()): #itemメソッドは2つのループ変数に戻す
    print(k, v)

#↑↓同じ意味

for k in sorted(fonnd):
    print(k, found[k])
list型の反復処理から辞書型の反復処理にする
#リスト型の反復処理
vowels = ['a', 'e', 'i', 'o', 'u']
word = input("単語を入力してください。母音を探します。")
found = []

for letter in word:
    if letter in vowels:
        if letter not in found:
            found.append(letter)
for vowels in found:
    print(vowels)

################################################
#辞書型の反復処理

vowels = ['a', 'e', 'i', 'o', 'u']
word = input("単語を入力してください。母音を探します。")
found = {}
found['a'] = 0
found['e'] = 0
found['i'] = 0
found['o'] = 0
found['u'] = 0

for letter in word:
    if letter in vowels:
        found[letter] += 1
for k, v in sorted(found.items()):
    print(k, v)

################################################
#集合を使った処理
vowels = set('aeiou')
word = input("単語を入力してください。")

found = vowels.intersection(set(word))
for vowels in found:
    print(vowels)t55
setdefaultメソッド

not inでの初期化も可能だが、setdefaultで簡単に初期化できる。

#not in での初期化
if 'pears' not in fruits:
    fruits['pears'] = 0

#setdefaultでの初期化
fruits.setdefault('pears', 0)

集合

vowels2 = set('aaeeiouu')
# >>>('e', 'u', 'a', 'i', 'o')

##和集合 union 集合と集合を結合する
u = vowels2.union(set(word)) 

##差集合 difference 共通していないものを取り出す
d = vowels2.difference(set(word))

##積集合 intersection 共通するオブジェクトを取り出す
i = vowels2.intersection(set(word))

タプル

不変データ構造。

vowels = ('a','e', 'i', 'o', 'u') #タプルは()囲む
#一つの値だけを入れるときは、必ずカンマを入れる。でないと文字列として扱われてしまう
word = ('python',)

組み込みデータ構造のおさらい

#リスト
l = list()
l = [1, 2, 3]

#辞書
d = dict()
d = { 'first': 1, 'second': 2, 'third': 3}

#集合
s = set()
s = {1, 2, 3}

#タプル
t = tuple()
t = (1, 2, 3)