Bahasa Python - Tuple

Tuple merupakan urutan nilai seperti halnya list. Nilai-nilai yang disimpan dalam tuple dapat berupa jenis apa pun, dan mereka diindeks oleh bilangan bulat. Perbedaan penting dalam python, tupel ini tidak dapat diubah. Tuples dapat diperbandingkan dan dapat di-hash sehingga kita dapat mengurutkan list dari mereka dan menggunakan tupel sebagai key value dalam dictionary Python.

Secara sintaksis, tuple adalah daftar nilai yang dipisahkan koma:

>>> t = 'a', 'b', 'c', 'd', 'e'

Meskipun tidak perlu, adalah umum untuk menyertakan tupel dalam tanda kurung untuk membantu kita mengidentifikasi tuple dengan cepat ketika kita melihat kode Python:

>>> t = ('a', 'b', 'c', 'd', 'e')

Untuk membuat tupel dengan satu elemen, Anda harus menyertakan koma final:

>>> t1 = ('a',)
>>> type(t1)
<type 'tuple'>

Tanpa koma Python memperlakukan (‘a’) sebagai ekspresi dengan string dalam tanda kurung yang mengevaluasi ke string:

>>> t2 = ('a')
>>> type(t2)
<type 'str'>

Cara lain untuk membuat tuple adalah fungsi tuple built-in. Tanpa argumen, itu menciptakan tupel kosong:

>>> t = tuple()
>>> print(t)
()

Jika argumen adalah urutan (string, daftar, atau tupel), hasil dari panggilan ke tupel adalah tupel dengan elemen-elemen rangkaian:

>>> t = tuple('lupins')
>>> print(t)
('l', 'u', 'p', 'i', 'n', 's')

Karena tupel adalah nama konstruktor, Anda harus menghindari menggunakannya sebagai nama variabel. Sebagian besar operator daftar juga bekerja pada tupel. Operator braket mengindeks elemen:

>>> t = ('a', 'b', 'c', 'd', 'e')
>>> print(t[0])
'a'

And the slice operator selects a range of elements.

>>> print(t[1:3])
('b', 'c')

Tetapi jika Anda mencoba memodifikasi salah satu elemen dari tuple, Anda mendapatkan error:

>>> t[0] = 'A'
TypeError: object doesn't support item assignment

Anda tidak dapat memodifikasi elemen tuple, tetapi Anda dapat mengganti satu tuple dengan yang lain:

>>> t = ('a', 'b', 'c', 'd', 'e')
>>> t = ('A',) + t[1:]
>>> print(t)
('A', 'b', 'c', 'd', 'e')

Operator perbandingan bekerja dengan tupel dan urutan lainnya. Python dimulai dengan membandingkan elemen pertama dari setiap urutan. Jika mereka sama, itu berlanjut ke elemen berikutnya, dan seterusnya, sampai menemukan elemen yang berbeda. Unsur-unsur berikutnya tidak dipertimbangkan (bahkan jika mereka benar-benar besar).

>>> (1, 2, 3) < (1, 4, 5)
True
>>> (1, 2, 3000000) < (1, 4, 5)
True

Fungsi sorting berfungsi dengan cara yang sama. Ini memilah terutama oleh elemen pertama, tetapi dalam kasus tie, itu mengurutkan berdasarkan elemen kedua, dan seterusnya. Fitur ini cocok untuk pola yang disebut DSU untuk

Decorate: urutan dengan membuat daftar tupel dengan satu atau beberapa kunci pengurutan yang mendahului elemen dari urutan, Sort: daftar tupel menggunakan jenis bawaan Python, dan Undecorate: dengan mengekstraksi elemen yang diurutkan dari urutan.

Misalnya, Anda memiliki daftar kata dan Anda ingin mengurutkannya dari yang terpanjang hingga terpendek:

txt = 'Mari Belajar Python dengan Gembira'
words = txt.split()
t = list()
for word in words:
    t.append((len(word), word))

t.sort(reverse=True)

res = list()
for length, word in t:
    res.append(word)
print(res)
['Gembira', 'Belajar', 'dengan', 'Python', 'Mari']

Lingkaran pertama membangun daftar tupel, di mana setiap tupel adalah kata yang didahului oleh panjangnya. sort membandingkan elemen pertama, panjang, pertama, dan hanya menganggap elemen kedua untuk memutuskan ikatan. Argumen kata kunci reverse = True mengatakan semacam untuk masuk dalam urutan menurun. Lingkaran kedua melintasi daftar tupel dan membuat daftar kata dalam urutan panjang yang menurun.

Salah satu fitur sintaksis unik dari bahasa Python adalah kemampuan untuk memiliki tuple di sisi kiri pernyataan tugas. Ini memungkinkan Anda untuk menetapkan lebih dari satu variabel pada saat ketika sisi kiri adalah urutan.

Dalam contoh ini kita memiliki daftar dua elemen (yang merupakan urutan) dan menetapkan elemen pertama dan kedua dari urutan ke variabel x dan y dalam satu pernyataan.

>>> m = [ 'selamat', 'bergembira' ]
>>> x, y = m
>>> x
'selamat'
>>> y
'bergembira'
>>>

Ini bukan sihir, Python secara kasar menerjemahkan sintaks tugas tupel menjadi sebagai berikut:

>>> m = [ 'selamat', 'bergembira' ]
>>> x = m[0]
>>> y = m[1]
>>> x
'selamat'
>>> y
'bergembira'
>>>

Aplikasi tupel yang sangat pintar memungkinkan kita untuk menukar nilai dua variabel dalam satu pernyataan:

>>> a, b = b, a

Kedua sisi pernyataan ini adalah tupel, tetapi sisi kiri adalah tupel variabel; sisi kanan adalah tupel ekspresi. Setiap nilai di sisi kanan ditetapkan ke variabel masing-masing di sisi kiri. Semua ekspresi di sisi kanan dievaluasi sebelum salah satu tugas. Jumlah variabel di sebelah kiri dan jumlah nilai di sebelah kanan harus sama:

>>> a, b = 1, 2, 3
ValueError: too many values to unpack

Secara umum, sisi kanan dapat berupa urutan apa saja (string, list, atau tuple). Misalnya, untuk membagi alamat email menjadi nama pengguna dan domain, Anda dapat menulis:

>>> addr = '[email protected]'
>>> uname, domain = addr.split('@')

Nilai hasil dari pembagian adalah daftar dengan dua elemen; elemen pertama ditugaskan untuk uname, yang kedua ke domain.

>>> print(uname)
belajarpiton
>>> print(domain)
gmail.com

Dictionaries memiliki metode yang disebut item yang mengembalikan daftar tupel, di mana setiap tupel adalah key-value pair:

>>> d = {'a':30, 'b':6, 'c':220}
>>> t = list(d.items())
>>> print(t)

[('a', 30), ('b', 6), ('c', 220)]

Seperti yang Anda harapkan dari dictionary, item tidak dalam urutan tertentu. Namun, karena daftar tupel adalah list, dan tupel dapat diperbandingkan, kita sekarang dapat mengurutkan daftar tupel. Mengonversi dictionary ke daftar tupel adalah cara bagi kita. output isi dictionary yang diurutkan berdasarkan key:

>>> d = {'a':10, 'b':1, 'c':22}
>>> t = list(d.items())
>>> t
[('b', 1), ('a', 10), ('c', 22)]
>>> t.sort()
>>> t
[('a', 10), ('b', 1), ('c', 22)]

Daftar baru diurutkan berdasarkan urutan abjad berdasarkan key value.

Menggabungkan item, tuple assignment, dan for, Anda dapat melihat pola kode yang bagus untuk melintasi key dan nilai kamus dalam satu loop:

>>> d = {'a':30, 'b':6, 'c':220}
>>> for key, val in list(d.items()):
>>>     print(val, key)
30 a
6 b
220 c

val adalah tuple assignment yang berturut-turut iterates melalui masing-masing key-value pairs dalam dictionary. Untuk setiap iterasi melalui loop, baik kunci dan nilai maju ke yang berikutnya key-value pair dalam dictionary (masih dalam urutan hash).

Sekali lagi, itu dalam urutan kunci hash (yaitu, tidak ada pesanan tertentu). Jika kita menggabungkan kedua teknik ini, kita dapat mencetak isi kamus yang diurutkan berdasarkan nilai yang disimpan di setiap key-value pair.

>>> d = {'a':10, 'b':1, 'c':22}
>>> l = list()
>>> for key, val in d.items() :
... l.append( (val, key) )
...
>>> l
[(10, 'a'), (22, 'c'), (1, 'b')]
>>> l.sort(reverse=True)
>>> l
[(22, 'c'), (10, 'a'), (1, 'b')]
>>>

Dengan menyusun daftar tupel dengan hati-hati untuk memiliki nilai sebagai elemen pertama setiap tupel, kita dapat mengurutkan daftar tupel dan mendapatkan konten dictionary diurutkan berdasarkan nilai.