🔙
🔝

見える化ちゃん 2期

金庫を開けたら金庫だった件😿

Chatpter.1 - 見えない値の映しかた

見えない値の映しかた

  • print() を使うとたいていの値は見られますが・・・。

  • たまにこんな感じで肩透かしをくらうことがあったりします。

    words = ['猫', 'の', 'み', 'ぞ', '知', 'る', 'ア', 'タ', 'イ']
    print(reversed(words))
    
    <list_reverseiterator object at 0x14881df13130> ふむふむわからん

    text = 'この変換、めんどくさい'
    print(reversed(text))
    
    <reversed object at 0x14881df13130> あぁそれね!
    実際に見てみてください!
  • そんな時には list(👻) を使うと、その値が見られるようになります。

    値がリストの場合

    words = ['猫', 'の', 'み', 'ぞ', '知', 'る', 'ア', 'タ', 'イ']
    words_rvsd = list(reversed(words))
    print(words_rvsd)
    
    words = ['猫', 'の', 'み', 'ぞ', '知', 'る', 'ア', 'タ', 'イ']
    words_rvsd = list(reversed(['猫', 'の', 'み', 'ぞ', '知', 'る', 'ア', 'タ', 'イ']))
    print(words_rvsd)
    

    ↓ 中身こんなんだけど・・・

    words = ['猫', 'の', 'み', 'ぞ', '知', 'る', 'ア', 'タ', 'イ']
    words_rvsd = list(<list_reverseiterator object at 0x14881df13130>)
    print(words_rvsd)
    

    list() を使うと、リストにして見せてくれる。

    words = ['猫', 'の', 'み', 'ぞ', '知', 'る', 'ア', 'タ', 'イ']
    words_rvsd = ['イ', 'タ', 'ア', 'る', '知', 'ぞ', 'み', 'の', '猫']
    print(words_rvsd)
    
    ['イ', 'タ', 'ア', 'る', '知', 'ぞ', 'み', 'の', '猫']

    値が文字列の場合

    text = 'この変換、めんどくさい'
    texts_rvsd = list(reversed(text))
    print(texts_rvsd)
    
    text = 'この変換、めんどくさい'
    texts_rvsd = list(reversed('この変換、めんどくさい'))
    print(texts_rvsd)
    
    text = 'この変換、めんどくさい'
    texts_rvsd = list(<reversed object at 0x14881df13130>)
    print(texts_rvsd)
    
    text = 'この変換、めんどくさい'
    texts_rvsd = ['い', 'さ', 'く', 'ど', 'ん', 'め', '、', '換', '変', 'の', 'こ']
    print(texts_rvsd)
    
    ['い', 'さ', 'く', 'ど', 'ん', 'め', '、', '換', '変', 'の', 'こ']
    list()を使って、きちんと見えるようにしてみましょう!

  • さらに見えないところで何やらコソコソやってますけど、気にしてはいけません。


  • これを元の文字列型に戻すと、

    text_rvsd = ''.join(texts_rvsd)
    print(text_rvsd)
    
    いさくどんめ、換変のこ

    めっさめんどくさいですね。


  • 簡単な方法として、文字列をそのまま逆順にしたい時は、

    text = 'やがて逆になる'
    text_rvsd = text[::-1]
    print(text_rvsd)
    
    text = 'やがて逆になる'
    text_rvsd = 'るなに逆てがや'
    print(text_rvsd)
    
    るなに逆てがや

    で、済んでしまいます。


  • この方法は、文字列じゃなくてリストでも余裕で使えます。

    words = ['や', 'が', 'て', '逆', 'に', 'な', 'る']
    words_rvsd = words[::-1]
    print(words_rvsd)
    
    words = ['や', 'が', 'て', '逆', 'に', 'な', 'る']
    words_rvsd = ['る', 'な', 'に', '逆', 'て', 'が', 'や']
    print(words_rvsd)
    
    ['る', 'な', 'に', '逆', 'て', 'が', 'や']

  • (╯°Д°)╯彡 ┻━┻

Chatpter.2 - 見えない値を見えないまま使う

[::-1] と reversed() は使いよう

  • 中身が見えないのに、いったいどこで使うか・・・

    ここでしょ。

    nums = [1, 2, 3, 4, 5]
    for i in reversed(nums):
        print(i)
    
    nums = [1, 2, 3, 4, 5]
    for i in <list_reverseiterator object at 0x1525c2b400d0>:
        print(i)
    

    見えない中身はこんな感じになっているはずホントはちょっと違うけど気にしない

    nums = [1, 2, 3, 4, 5]
    for i in [5, 4, 3, 2, 1]:
        print(i)
    
    5
    4
    3
    2
    1

  • [::-1] の場合はこんな感じ。

    nums = [1, 2, 3, 4, 5]
    for i in nums[::-1]:
        print(i)
    
    nums = [1, 2, 3, 4, 5]
    for i in [5, 4, 3, 2, 1]:
        print(i)
    
    5
    4
    3
    2
    1

  • 比べてみる

    for i in reversed(nums):
    
    for i in nums[::-1]:
    

    この場合、英語の文章的には reversed() のほうがわかりやすい・・・かな?

Chatpter.3 - 他にも潜む見えざる値

もう罠としかいいようがない、その他関数

map()

map()

  • よく使う使い方は、リストの中の数値に変換できる str を一気に int化するのに使われます。

    datas = ['1', '2', '3', '4', '5']
    nums = map(int, datas)  # リスト内の値を 全部 int にする
    print(nums)
    
    [1, 2, 3, 4, 5]← 理想 <map object at 0x1538af627430>← 現実

  • これも list() に変換すれば値を見ることが出来ます。

    datas = ['1', '2', '3', '4', '5']
    nums = list(map(int, datas))
    print(nums)
    
    [1, 2, 3, 4, 5]← 理想が具現化された

  • 見えないだけで、文ではリストと同じように使うことはできます。

    datas = ['1', '2', '3', '4', '5']
    for i in map(int, datas):
        print(i)
    
    1
    2
    3
    4
    5

  • けど、リストではないので、要素の値を直接扱うことは出来ません。

    datas = ['1', '2', '3', '4', '5']
    nums = map(int, datas)
    print(nums[1])
    
    datas = ['1', '2', '3', '4', '5']
    nums = <map object at 0x14aea2be6430>  # リストじゃなくて罠だし!
    print(nums[1])
    
    Traceback (most recent call last):
      File "Main.py", line 3, in <module>
        print(nums[1])
    TypeError: 'map' object is not subscriptable
    

zip()

zip()

  • 2つのリストを先頭から1つずつ、互い違いに組み合わせる機能です。

  • ジッパーを閉じるようなイメージです。

    data1 = [1, 2, 3]
    data2 = [4, 5, 6]
    nums = zip(data1, data2)
    print(nums)
    
    [(1, 4), (2, 5), (3, 6)]← 理想 <zip object at 0x15081d7fcc80>← 現実

  • これも list() に変換すれば値を見ることが出来ます。

    data1 = [1, 2, 3]
    data2 = [4, 5, 6]
    nums = list(zip(data1, data2))
    print(nums)
    
    [(1, 4), (2, 5), (3, 6)]← 理想が具現化された

  • 見えないだけで、これもリストと同じように使うことはできます。

    data1 = [1, 2, 3]
    data2 = [4, 5, 6]
    for i, j in zip(data1, data2):
        print(i, j)
    
    data1 = [1, 2, 3]
    data2 = [4, 5, 6]
    for i, j in <zip object at 0x15081d7fcc80>:
        print(i, j)
    

    見えないところでこんな風になっているかもしれないしらんけど

    data1 = [1, 2, 3]
    data2 = [4, 5, 6]
    for i, j in [(1, 4), (2, 5), (3, 6)]:
        print(i, j)
    # 組み合わさった (1, 4) をそれぞれ i, j に代入しています。
    
    1 4
    2 5
    3 6

    zip() は使うとしたら、文で使うことが多いかもしれません。

  • [(1, 4), (2, 5), (3, 6)] で出てきた ( ) は 「タプル」と言います。

  • タプルはもう少し後で紹介します。