老斉とPythonの少し簡潔な元組を学びます

3894 ワード

元組については、前の話でこの名詞に触れた.本論はそれを完全に述べる.
まず例を見てみましょう.

>>>#    str
>>> s = "abc"
>>> s
'abc'

>>>#     ,   ...
>>> t = 123,'abc',["come","here"]
>>> t
(123, 'abc', ['come', 'here'])


上記の例で見た変数tは、エラーもなく、「最後の有効」もなく、オブジェクトを新しいデータ型:tuple(メタグループ)として変数tに付与します.
メタグループはカッコで囲まれており、要素間はカンマで区切られています.(いずれも英語の半角)
tupleはシーケンスタイプのデータであり、list/strと類似している.その特徴はその中の要素が変更できないことであり、この点ではlistとは異なりstrと似ている.その要素はまた任意のタイプのデータであってもよい.この点ではlistと同じであるがstrとは異なる.

>>> t = 1,"23",[123,"abc"],("python","learn")  #     , list
>>> t
(1, '23', [123, 'abc'], ('python', 'learn'))

>>> t[0] = 8                  #      , str
Traceback (most recent call last):
 File "", line 1, in 
TypeError: 'tuple' object does not support item assignment

>>> t.append("no") 
Traceback (most recent call last):
 File "", line 1, in 
AttributeError: 'tuple' object has no attribute 'append'
  >>> 


上記の簡単な比較から,tupleは部分listと部分str特性を融合させたハイブリダイゼーション生成物であると考えられる.この言葉は理にかなっている.
リストのように要素とスライスにアクセス
リストの知識を復習します.

>>> one_list = ["python","qiwsir","github","io"]
>>> one_list[2]
'github'
>>> one_list[1:]     
['qiwsir', 'github', 'io']
>>> for word in one_list:
...   print word
... 
python
qiwsir
github
io
>>> len(one_list)
4

上のリストをtupleに変えてもいいかどうかもう一度実験します.

>>> t
(1, '23', [123, 'abc'], ('python', 'learn'))
>>> t[2]
[123, 'abc']
>>> t[1:]
('23', [123, 'abc'], ('python', 'learn'))
>>> for every in t:
...   print every
... 
1
23
[123, 'abc']
('python', 'learn')
>>> len(t)
4

>>> t[2][0]   #     ,   ,list     
123
>>> t[3][1]
'learn'


リストでリストを変更できるすべての方法はtupleでは無効です.
それぞれlist()とtuple()で両者の変換を実現することができる:

>>> t     
(1, '23', [123, 'abc'], ('python', 'learn'))
>>> tls = list(t)              #tuple-->list
>>> tls
[1, '23', [123, 'abc'], ('python', 'learn')]

>>> t_tuple = tuple(tls)          #list-->tuple
>>> t_tuple
(1, '23', [123, 'abc'], ('python', 'learn'))


tupleはどこで使いますか?
リストとstrのハイブリッドである以上、何の用途がありますか?リストとstrでいいんじゃないですか?
多くの場合、確かにlistもstrも使えます.しかし、私たちがコンピュータ言語で解決した問題はすべて簡単な問題ではなく、私たちの自然言語のように、ある語彙はあってもなくてもいいように見えますが、他の言語でも置き換えることができますが、私たちは依然としていくつかの状況でそれらを使用する必要があります.
一般的にtupleにはこのような特徴があり、使用されているシナリオでもあると考えられています.
Tupleはlistより操作速度が速い.値の定数セットを定義し、リストの代わりにtupleを使用して、それを使用するのは唯一です.変更する必要のないデータを書き込み保護すると、コードがより安全になります.リストではなくtupleを使用するのは、隠しassert文を持つように、このデータが定数であることを示します.これらの値を変更する必要がある場合は、tupleからlistへの変換を実行する必要があります(特殊な関数を使用する必要があります).
Tuplesはdictionaryでkeyとして使用できますがlistはできません.実際、これよりもっと複雑なことです.Dictionary keyは可変でなければなりません.Tuple自体は変えられませんが、listのtupleがあれば可変だと思います.dictionary keyとして使うのは安全ではありません.dictionary keyとして使用できるのは、文字列、整数、またはdictionaryに対して安全なtupleのみです.Tuplesは文字列フォーマットで使用できますが、後で使用します.