>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2
İkisi de geçerli mi? Bir sebepten dolayı tercih edilir mi?
>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2
İkisi de geçerli mi? Bir sebepten dolayı tercih edilir mi?
Yanıtlar:
Köşeli parantezler listelerken parantez tupeldir .
Bir liste değiştirilebilir, yani içeriğini değiştirebilirsiniz:
>>> x = [1,2]
>>> x.append(3)
>>> x
[1, 2, 3]
tuples olmasa da:
>>> 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'
Diğer ana fark, bir demetin yıkanabilir olmasıdır, yani diğer şeylerin yanı sıra bir sözlük anahtarı olarak kullanabilirsiniz. Örneğin:
>>> 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'
Birçok insanın işaret ettiği gibi, birlikte tuples ekleyebilirsiniz. Örneğin:
>>> x = (1,2)
>>> x += (3,)
>>> x
(1, 2, 3)
Bununla birlikte, bu tuplelerin değiştirilebilir olduğu anlamına gelmez . Yukarıdaki örnekte , iki tuple bağımsız değişken olarak toplanarak yeni bir tuple oluşturulur. Orijinal grup değiştirilmez. Bunu göstermek için aşağıdakileri göz önünde bulundurun:
>>> x = (1,2)
>>> y = x
>>> x += (3,)
>>> x
(1, 2, 3)
>>> y
(1, 2)
Yine de, aynı örneği bir listeyle oluşturacak yolsaydınız da güncellenirdi:
>>> x = [1, 2]
>>> y = x
>>> x += [3]
>>> x
[1, 2, 3]
>>> y
[1, 2, 3]
İlginç bir fark:
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)
Yalnızca tek bir değer olsa bile bir virgül bir tuple içine dahil edilmelidir. örneğin (1,)yerine (1).
Bunlar liste değil, bir liste ve bir demet. Tuples hakkında Python dersinde okuyabilirsiniz . Listeleri değiştirebilmenize rağmen, bu tuples ile mümkün değildir.
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
Köşeli parantezlerin ve parantezlerin farklı olmasının bir başka yolu, köşeli parantezlerin bir liste kavramasını, [x for x in y]
Karşılık gelen parantez sözdizimi bir tuple üretecini belirtirken :(x for x in y)
Aşağıdakileri kullanarak bir grup kavrayışı elde edebilirsiniz: tuple(x for x in y)
Bakınız: Python'da neden grup kavrayışı yok?
Birincisi bir liste, ikincisi bir demet. Listeler değiştirilebilir, tuples değil.
Eğiticinin Veri Yapıları bölümüne ve belgelerin Sıra Türleri bölümüne bakın.
Çevrelediği ürün virgül ile ayrılmış (ve )olan tuplekişiler tarafından kapalı, s [ve ]vardır lists.
:P
(ve )olan tuplelar, çevrelediği bu [ve ]olan listlar."
(i for i in ...)ve arasında daha derin bir fark var[i for i in ...].