>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2
どちらも有効ですか?何らかの理由で優先されますか?
>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2
どちらも有効ですか?何らかの理由で優先されますか?
回答:
リストは変更可能です。つまり、リストの内容を変更できます。
>>> x = [1,2]
>>> x.append(3)
>>> x
[1, 2, 3]
タプルはそうではありませんが:
>>> x = (1,2)
>>> x
(1, 2)
>>> x.append(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
もう1つの主な違いは、タプルがハッシュ可能であることです。これは、特に、タプルを辞書のキーとして使用できることを意味します。例えば:
>>> x = (1,2)
>>> y = [1,2]
>>> z = {}
>>> z[x] = 3
>>> z
{(1, 2): 3}
>>> z[y] = 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
多くの人が指摘しているように、タプルを一緒に追加できることに注意してください。例えば:
>>> x = (1,2)
>>> x += (3,)
>>> x
(1, 2, 3)
ただし、これはタプルが変更可能であることを意味しません。上記の例では、2つのタプルを引数として追加することにより、新しいタプルが作成されます。元のタプルは変更されません。これを実証するために、以下を検討してください。
>>> x = (1,2)
>>> y = x
>>> x += (3,)
>>> x
(1, 2, 3)
>>> y
(1, 2)
一方、リストを使用して同じ例を作成すると、次のy
ように更新されます。
>>> x = [1, 2]
>>> y = x
>>> x += [3]
>>> x
[1, 2, 3]
>>> y
[1, 2, 3]
1つの興味深い違い:
lst=[1]
print lst // prints [1]
print type(lst) // prints <type 'list'>
notATuple=(1)
print notATuple // prints 1
print type(notATuple) // prints <type 'int'>
^^ instead of tuple(expected)
値が1つしか含まれていない場合でも、コンマはタプルに含める必要があります。例えばの(1,)
代わりに(1)
。
それらはリストではなく、リストとタプルです。Pythonチュートリアルでタプルについて読むことができます。リストは変更できますが、タプルでは変更できません。
In [1]: x = (1, 2)
In [2]: x[0] = 3
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/user/<ipython console> in <module>()
TypeError: 'tuple' object does not support item assignment
大括弧と小括弧が異なるもう1つの方法は、大括弧がリスト内包表記を記述できることです。例えば、 [x for x in y]
一方、対応する括弧構文はタプルジェネレータを指定します:(x for x in y)
以下を使用してタプル内包を取得できます。 tuple(x for x in y)
囲まれた項目をカンマ区切り (
と)
しているtuple
S、囲まれたもの[
と]
されlist
、S。
:P
(
と)
しているtuple
の、で囲まれたもの[
と]
されているlist
の。」
(i for i in ...)
あり[i for i in ...]
ます。