Latest web development tutorials

struktur data Python3

Bab ini terutama dikombinasikan dengan pengetahuan yang kita pelajari sebelumnya untuk memperkenalkan struktur data Python.


daftar

daftar Python adalah variabel, yang merupakan fitur yang paling penting membedakannya dari string dan tupel, yaitu satu kalimat: Daftar dapat dimodifikasi, sementara string dan tupel tidak bisa.

Berikut adalah daftar Python:

cara deskripsi
list.append (x) Untuk menambahkan item ke akhir daftar, setara dengan [len (a):] = [x].
list.extend (L) Dengan menambahkan semua elemen dari daftar yang ditentukan untuk memperluas daftar, setara dengan [len (a):] = L.
list.insert (i, x) Menyisipkan item di lokasi yang ditentukan. Parameter pertama adalah untuk dimasukkan ke indeks di depan elemen, seperti a.insert (0, x) akan dimasukkan sebelum seluruh daftar, tapi a.insert (len (a), x) adalah setara dengan a.append ( x).
list.remove (x) Menghapus elemen pertama dari daftar yang nilainya x. Jika tidak ada unsur seperti itu, akan kembali kesalahan.
list.pop ([i]) Menghapus elemen dari posisi yang ditentukan dalam daftar ini, dan mengembalikannya. Jika Anda tidak menentukan indeks, a.pop () mengembalikan elemen terakhir. Elemen segera dihapus dari daftar. (Metode kurung di sekitar saya menunjukkan bahwa parameter opsional, tidak bahwa Anda harus mengetikkan tanda kurung persegi, Anda akan sering melihat notasi ini dengan Python Perpustakaan Referensi.)
list.clear () Hapus semua item dalam daftar, sama dengan del sebuah [:].
list.index (x) Mengembalikan index dari daftar dengan nilai x dalam elemen pertama. Jika ada unsur pencocokan akan kembali kesalahan.
list.count (x) Mengembalikan jumlah kali x muncul dalam daftar.
list.sort () Dari unsur-unsur dalam daftar akan diurutkan.
list.reverse () elemen terbalik dalam daftar.
list.copy () Mengembalikan salinan dangkal daftar adalah sama dengan [:].

Contoh berikut menggambarkan sebagian daftar metode:

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> print(a.count(333), a.count(66.25), a.count('x'))
2 1 0
>>> a.insert(2, -1)
>>> a.append(333)
>>> a
[66.25, 333, -1, 333, 1, 1234.5, 333]
>>> a.index(333)
1
>>> a.remove(333)
>>> a
[66.25, -1, 333, 1, 1234.5, 333]
>>> a.reverse()
>>> a
[333, 1234.5, 1, 333, -1, 66.25]
>>> a.sort()
>>> a
[-1, 1, 66.25, 333, 333, 1234.5]

Catatan: Mirip dengan menyisipkan, menghapus atau mengubah daftar urutan, dll tidak ada nilai kembali.


Menggunakan daftar sebagai tumpukan

Metode membuat daftar daftar dapat dengan mudah digunakan sebagai tumpukan, tumpukan sebagai struktur data tertentu, yang pertama untuk memasukkan elemen terakhir akan dirilis (LIFO). Gunakan () metode append dapat menambahkan elemen ke atas tumpukan. Tanpa indeks eksplisit pop () metode dapat mengambil item dari atas tumpukan. Sebagai contoh:

>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]

Gunakan daftar sebagai antrian

Daftar ini juga dapat digunakan sebagai antrian, antrian adalah yang pertama untuk bergabung dengan elemen, yang pertama diambil, namun, mengambil daftar ini sebagai tujuan tidak efisien. Tambahkan pada akhir daftar atau pop-up unsur kecepatan, namun, untuk memasukkan atau mengeluarkan dari kecepatan kepala tidak cepat (karena semua elemen lain harus memindahkan satu per satu) dalam daftar.

>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry")           # Terry arrives
>>> queue.append("Graham")          # Graham arrives
>>> queue.popleft()                 # The first to arrive now leaves
'Eric'
>>> queue.popleft()                 # The second to arrive now leaves
'John'
>>> queue                           # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])

comprehensions daftar

comprehensions daftar menyediakan cara ringkas untuk membuat daftar dari urutan. Beberapa aplikasi umumnya akan diterapkan untuk setiap elemen dari urutan operasi, dengan hasil yang diperoleh sebagai elemen untuk menghasilkan daftar baru, atau membuat urutan ditentukan sesuai dengan kondisi penentuan.

Setiap pemahaman daftar setelah untuk dengan ekspresi, maka nol atau lebih untuk atau jika klausa. Hasilnya adalah daftar yang dihasilkan dari konteks berikutnya untuk dan jika sesuai dengan ekspresi. Jika Anda ingin rumus tupel, Anda harus menggunakan tanda kurung.

Di sini kita akan daftar setiap nomor tiga, untuk mendapatkan daftar baru:

>>> vec = [2, 4, 6]
>>> [3*x for x in vec]
[6, 12, 18]

Sekarang kami bermain trik kecil:

>>> [[x, x**2] for x in vec]
[[2, 4], [4, 16], [6, 36]]

Di sini kita memanggil metode individual untuk setiap elemen secara berurutan:

>>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']

Kita dapat menggunakan jika klausa sebagai filter:

>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x < 2]
[]

Berikut adalah beberapa demo bersepeda dan keterampilan lainnya:

>>> vec1 = [2, 4, 6]
>>> vec2 = [4, 3, -9]
>>> [x*y for x in vec1 for y in vec2]
[8, 6, -18, 16, 12, -36, 24, 18, -54]
>>> [x+y for x in vec1 for y in vec2]
[6, 5, -7, 8, 7, -5, 10, 9, -3]
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
[8, 12, -54]

comprehensions daftar dapat menggunakan ekspresi kompleks atau fungsi bersarang:

>>> [str(round(355/113, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']

daftar bersarang pemahaman

Python daftar juga dapat bersarang.

Contoh berikut menunjukkan daftar 3X4 matriks:

>>> matrix = [
...     [1, 2, 3, 4],
...     [5, 6, 7, 8],
...     [9, 10, 11, 12],
... ]

Contoh berikut berisi 3X4 matriks ke daftar konversi 4x3:

>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

Contoh berikut juga dapat menggunakan metode berikut:

>>> transposed = []
>>> for i in range(4):
...     transposed.append([row[i] for row in matrix])
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

Metode Lain:

>>> transposed = []
>>> for i in range(4):
...     # the following 3 lines implement the nested listcomp
...     transposed_row = []
...     for row in matrix:
...         transposed_row.append(row[i])
...     transposed.append(transposed_row)
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

pernyataan del

Anda dapat menggunakan pernyataan del dengan indeks bukannya nilai untuk menghapus sebuah elemen dari daftar. Ini adalah penggunaan pop () mengembalikan nilai yang berbeda. Anda dapat menggunakan pernyataan del untuk menghapus luka dari daftar, atau menghapus seluruh daftar (metode kami sebelumnya presentasi ditugaskan memotong ke daftar kosong). Sebagai contoh:

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]

Anda juga dapat menghapus variabel contoh dengan del:

>>> del a

Tupel dan urutan

Jumlah tuple dari nilai dipisahkan koma terdiri, misalnya:

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))

Seperti yang Anda lihat, pada output tupel yang alway dalam tanda kurung, dalam rangka untuk benar mengungkapkan struktur bersarang. Mungkin tidak ada tanda kurung atau saat memasuki, tapi kurung biasanya diperlukan (jika tuple adalah bagian dari ekspresi yang lebih besar).


set

Sebuah koleksi adalah koleksi unordered elemen yang unik. fitur dasar termasuk pengujian dan menghilangkan duplikat elemen.

Anda dapat membuat satu set kawat gigi ({}). Catatan: Jika Anda ingin membuat himpunan kosong, Anda harus menggunakan set () bukannya {}; yang menciptakan kamus kosong, bagian selanjutnya kita akan memperkenalkan struktur data ini.

Berikut ini adalah demonstrasi sederhana:

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # 删除重复的
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # 检测成员
True
>>> 'crabgrass' in basket
False

>>> # 以下演示了两个集合的操作
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  # a 中唯一的字母
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # 在 a 中的字母,但不在 b 中
{'r', 'd', 'b'}
>>> a | b                              # 在 a 或 b 中的字母
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # 在 a 和 b 中都有的字母
{'a', 'c'}
>>> a ^ b                              # 在 a 或 b 中的字母,但不同时在 a 和 b 中
{'r', 'd', 'b', 'm', 'z', 'l'}

Collection juga mendukung derivasi dari rumus:

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

kamus

Jenis data yang berguna lain yang dibangun ke dalam Python adalah kamus.

Sebuah urutan yang kontinu indeks integer, dan perbedaan ini, kata kunci kamus diindeks kata kunci dapat menjadi semua jenis berubah, biasanya dengan string atau numerik.

Cara terbaik untuk memahaminya sebagai kamus yang unordered pasangan kunci => nilai. Dalam kamus yang sama, tombol harus berbeda satu sama lain.

Sepasang kawat gigi menciptakan kamus kosong: {}.

Ini adalah contoh sederhana dari penggunaan kamus:

>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'guido': 4127, 'irv': 4127, 'jack': 4098}
>>> list(tel.keys())
['irv', 'guido', 'jack']
>>> sorted(tel.keys())
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> 'jack' not in tel
False

Konstruktor dict () untuk membangun kamus langsung dari daftar kunci-tuple. Jika Anda memiliki pola tetap, daftar comprehensions menentukan tertentu pasangan nilai kunci:

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'jack': 4098, 'guido': 4127}

Selain itu, kamus dapat digunakan untuk membuat ekspresi untuk mendapatkan kamus kunci dan nilai-nilai:

>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

Jika kata kunci hanya string pasangan kunci-nilai menggunakan argumen kata kunci kadang-kadang lebih mudah untuk menentukan:

>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'jack': 4098, 'guido': 4127}

teknik traversal

Ketika melintasi di kamus, nilai kunci dan sesuai dapat menggunakan item () metode untuk interpretasi simultan keluar:

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
...
gallahad the pure
robin the brave

Ketika melintasi di urutan, indeks posisi dan nilai yang sesuai dapat digunakan Menghitung () fungsi juga menerima:

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe

Saat melintasi dua atau lebih sekuens, Anda dapat menggunakan zip () dalam kombinasi:

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

Untuk melintasi urutan terbalik, pertama tentukan urutan, dan kemudian memanggil reversesd () fungsi:

>>> for i in reversed(range(1, 10, 2)):
...     print(i)
...
9
7
5
3
1

Melintasi urutan sesuai dengan urutan, penggunaan diurutkan fungsi () mengembalikan urutan diurutkan, tidak mengubah nilai asli:

>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
...     print(f)
...
apple
banana
orange
pear

Lihat dokumentasi