List sa Python: mga method, slice, sorting, append, tuple, at set
Ang list sa Python ay maayos at mababagong koleksiyon ng anumang halaga sa loob ng mga square bracket, halimbawa [250, 1200, 99]: maaaring idagdag ang mga elemento gamit ang append, ipasok, tanggalin, kunin gamit ang slice, at ayusin. Inaayos ng sort ang listahan sa mismong lugar at nagbabalik ng None, samantalang ang sorted ay nagbabalik ng bagong nakaayos na listahan.
Ang list sa Python (list) ay maayos na koleksiyon ng anumang halaga sa loob ng mga square bracket, at maaari itong baguhin: magdagdag ng elemento sa dulo, magpasok sa gitna, magtanggal, mag-ayos. Ito ang pinakagamiting koleksiyon ng wika: mga linya ng file, mga gastos sa buong buwan, mga sagot ng API — halos lahat ay nagsisimula sa list. Tatalakayin natin ang python list nang buo: paggawa, mga method, slice, sorting, list comprehension, pagkopya, at sa dulo, tuple at set.
Ano ang list sa Python
Iniimbak ng list ang mga elemento ayon sa pagkakasunod na itinakda mo, at naaabot ang mga ito sa pamamagitan ng index na nagsisimula sa zero. Maaaring magkakaiba ang uri ng mga halaga sa iisang list, bagaman sa praktika ay karaniwang magkakapareho ang datos.
amounts = [250, 1200, 99]
print(amounts[0]) # 250 — unang elemento
print(amounts[-1]) # 99 — huling elemento
amounts[1] = 1300 # nababago ang list
print(len(amounts)) # 3 — haba ng list
Ibinabalik ng function na len() ang laki ng list. Kapag tinangka mong i-access ang index na wala, makakakuha ka ng IndexError: list index out of range.
Paggawa ng list
empty = [] # walang laman na list
also_empty = list() # pareho, gamit ang function na list
nums = [1, 2, 3]
chars = list("abc") # ['a', 'b', 'c']
digits = list(range(5)) # [0, 1, 2, 3, 4]
zeros = [0] * 4 # [0, 0, 0, 0]
Ginagawang list ng function na list() ang anumang iterable object: string, range, set, o mga key ng dictionary.
append at iba pang method ng list
Idinadagdag ng method na append ang isang elemento sa dulo ng list — ito ang pinakamadalas gamiting method sa Python. Binabago nito ang list sa mismong lugar at nagbabalik ng None.
amounts = [250, 1200]
amounts.append(450) # [250, 1200, 450]
amounts.extend([10, 20]) # [250, 1200, 450, 10, 20]
amounts.insert(0, 5) # [5, 250, 1200, 450, 10, 20]
amounts.remove(1200) # tanggalin ang unang halagang 1200
last = amounts.pop() # 20 — tanggalin at ibalik ang huli
Karaniwang pagkakamali: ang a.append([10, 20]) ay nagdaragdag ng isang elemento — isang nakapaloob na list, hindi dalawang numero. Para sa maraming elemento, gamitin ang extend.
| Method | Ginagawa |
|---|---|
append(x) | idagdag ang x sa dulo |
extend(iter) | idagdag ang lahat ng elemento ng sunod-sunod na datos |
insert(i, x) | ipasok ang x bago ang index na i |
remove(x) | tanggalin ang unang pagkakataon ng x (ValueError kung wala) |
pop(i=-1) | tanggalin at ibalik ang elemento sa index |
index(x) | index ng unang pagkakataon |
count(x) | ilang beses lumitaw ang x |
sort() | ayusin sa mismong lugar |
reverse() | baligtarin sa mismong lugar |
copy() | shallow copy |
clear() | linisin ang list |
Maaari ring magtanggal ng elemento sa index o ng buong saklaw gamit ang del na operator: del a[0], del a[1:3]. Kapaki-pakinabang na built-in na function para sa list: len, sum, min, max, sorted, reversed, enumerate, zip.
Mga slice sa Python
Kumukuha ng bahagi ng list ang slice ayon sa anyong a[start:stop:step]: mula sa start na kasama, hanggang sa stop na hindi kasama, na may hakbang na step. Maaaring alisin ang alinmang bahagi. Laging nagbabalik ng bagong list ang slice.
a = [0, 1, 2, 3, 4, 5]
print(a[1:4]) # [1, 2, 3]
print(a[:2]) # [0, 1] — unang dalawa
print(a[-2:]) # [4, 5] — huling dalawa
print(a[::2]) # [0, 2, 4] — bawat ikalawa
print(a[::-1]) # [5, 4, 3, 2, 1, 0] — baligtad
print(a[:]) # kopya ng buong list
Hindi tulad ng index, hindi nagbibigay ng error ang slice na lumalampas sa list: ang a[10:20] ay magbabalik lang ng []. Maaari ring bigyan ng halaga ang slice at palitan ang bahagi ng list: a[1:3] = ["x", "y", "z"].
Slice ng string
Pareho ang paggana ng slice sa lahat ng sunod-sunod na datos, kasama ang string at tuple:
s = "Python 3.15"
print(s[:6]) # Python
print(s[-4:]) # 3.15
print(s[::-1]) # 51.3 nohtyP
Hindi mo mababago ang string gamit ang slice — hindi nababago ang string, at gagawa ang slice ng bagong string.
Pag-aayos ng list: sort at sorted
Dito kadalasang nalilito ang mga baguhan. Inililipat ng method na sort ang mga elemento sa mismong list at nagbabalik ng None. Hindi ginagalaw ng function na sorted ang orihinal na list at nagbabalik ng bagong nakaayos na list.
amounts = [250, 1200, 99]
amounts.append(450)
print(sorted(amounts)) # [99, 250, 450, 1200] — bagong kopya
print(amounts) # [250, 1200, 99, 450] — buo pa ang orihinal
result = amounts.sort() # inaayos sa mismong lugar
print(result, amounts) # None [99, 250, 450, 1200]
Dito nanggagaling ang klasikong tanong na "bakit None ang nakukuha ko": ang a = a.sort() ay nagpapalit ng list sa halagang None. Isulat alinman sa a.sort() o sa a = sorted(a).
Key at pagkakasunod na pababa
Parehong tumatanggap ang dalawa ng mga parameter na key at reverse. Ang key ay function na ang resulta ang ginagamit sa paghahambing ng mga elemento.
words = ["kape", "Taksi", "abonado"]
print(sorted(words, key=len)) # ['kape', 'Taksi', 'abonado']
print(sorted(words, key=str.lower)) # hindi sensitibo sa letra
print(sorted([3, 1, 2], reverse=True)) # [3, 2, 1]
expenses = [("Pagkain", 650), ("Sine", 120), ("Taksi", 300)]
expenses.sort(key=lambda e: e[1]) # ayon sa halaga
Stable ang sorting sa Python: nananatili ang orihinal na pagkakasunod ng mga elementong may parehong key. Iba rin ang sakop ng dalawa: tinatanggap ng sorted ang anumang sunod-sunod na datos (string, dictionary, set), samantalang may sort lang ang list.
Baligtarin ang list
Tatlong paraan na may magkakaibang kilos:
a.reverse()— binabaligtad sa mismong lugar, nagbabalik ngNone;a[::-1]— bagong baligtad na list;reversed(a)— lazy iterator, maginhawa sa loop:for x in reversed(a):.
Pagdaan sa list
items = ["kape", "metro", "sine"]
for item in items:
print(item)
for i, item in enumerate(items, start=1):
print(i, item) # 1 kape, 2 metro, 3 sine
print("sine" in items) # True — pagsusuri kung nandoon
Huwag magtanggal ng elemento sa list na dinadaanan ng loop — may ilang elementong malalaktawan. Bumuo ng bagong list gamit ang comprehension, o dumaan sa kopya na a[:].
List comprehension
Bumubuo ang list comprehension ng bagong list sa isang linya: ekspresyon, loop, at opsyonal na kondisyon.
squares = [n * n for n in range(6)] # [0, 1, 4, 9, 16, 25]
big = [a for a in [250, 1200, 99] if a > 200] # [250, 1200]
names = [s.strip().title() for s in [" anna ", "oscar"]]
Kadalasang mas mabilis at mas madaling basahin ang list comprehension kaysa sa loop na may append. Pero kung hindi kasya sa isang malinaw na linya ang lohika, mas mabuti ang tahasang loop.
Pagsasama, pagdaragdag, at pagbabawas ng list
a = [1, 2, 3]
b = [3, 4]
print(a + b) # [1, 2, 3, 3, 4] — bagong list
a += b # katulad ng a.extend(b)
print([*a, *b]) # unpacking sa bagong list
Walang operator na - para sa pagbabawas ng list. Para alisin sa isang list ang mga elemento ng isa pa, gumamit ng comprehension: [x for x in a if x not in set(b)]. Mas madaling hanapin ang intersection ng mga list gamit ang set: set(a) & set(b) (nawawala ang pagkakasunod at mga duplicate sa prosesong ito).
Nested at dalawang-dimensiyong list
Ang list ng mga list ay simpleng paraan para mag-imbak ng talahanayan o matrix:
matrix = [[1, 2, 3], [4, 5, 6]]
print(matrix[1][2]) # 6
grid = [[0] * 3 for _ in range(2)] # tama
bad = [[0] * 3] * 2 # bitag: dalawang reference sa iisang list
bad[0][0] = 9
print(bad) # [[9, 0, 0], [9, 0, 0]]
Unpacking ng list
first, second, third = [10, 20, 30]
head, *rest = [1, 2, 3, 4] # head=1, rest=[2, 3, 4]
print(*["a", "b"], sep=", ") # a, b — print ng list nang walang bracket
Kapag hindi tugma ang bilang ng variable sa haba ng list, magkakaroon ng ValueError — dito nakatutulong ang asterisk.
Pagkopya ng list
Hindi kinokopya ng b = a ang list; naglalagay lang ito ng pangalawang label sa iisang object: ang pagbabago sa pamamagitan ng b ay makikita sa a. Ang hiwalay na kopya ay tahasang ginagawa: a.copy(), list(a), o a[:]. Para sa nested na datos, hindi sapat ito — mananatiling nakabahagi ang mga panloob na list, kaya kailangan ang copy.deepcopy(a).
import copy
a = [[1, 2], [3]]
b = a.copy()
b[0].append(99)
print(a) # [[1, 2, 99], [3]] — nakabahagi ang nested list
c = copy.deepcopy(a) # ganap na hiwalay na kopya
Tuple: list na hindi nababago
Katulad ng list ang tuple (tuple), pero hindi ito mababago pagkatapos gawin. Malinaw itong senyales sa nagbabasa: isang rekord na may nakapirmeng mga field ang nasa harapan mo, hindi lumalaking koleksiyon. Madaling i-unpack ang tuple, at dito karaniwang ibinabalik ng mga function ang maraming halaga.
expense = (250, "Kape")
amount, item = expense
expense[0] = 300
# TypeError: 'tuple' object does not support item assignment
Ang tuple na may hindi nababagong halaga ay puwedeng i-hash, kaya maaari itong gamiting key ng dictionary. Ang tuple na may isang elemento ay isinusulat na may kuwit: (5,).
Set: mga natatanging halaga lang
Iniimbak ng set (set) ang mga natatanging halaga lang at hindi inaalala ang pagkakasunod. Ito ang pinakamabilis na paraan para alisin ang mga duplicate at tingnan kung may ganoong elemento, at kaya rin nitong gawin ang intersection, union, at difference.
jan = {"Pagkain", "Taksi", "Sine"}
feb = {"Pagkain", "Subscription"}
print(jan & feb) # {'Pagkain'}
print(feb - jan) # {'Subscription'}
unique = list(dict.fromkeys([3, 1, 3, 2])) # [3, 1, 2] — walang duplicate, nananatili ang pagkakasunod
empty = set() # {} — dictionary ito, hindi set!
Aling koleksiyon ang pipiliin
| Gawain | Koleksiyon |
|---|---|
| Pagkakasunod at pagbabago | list |
| Nakapirmeng rekord | tuple |
| Paghahanap ayon sa key | dict |
| Pagiging natatangi, pagsusuri kung mayroon | set |
| Mga setting na hindi nababago | frozendict (Python 3.15) |
Isa-isang tinitingnan ng x in list ang mga elemento, samantalang halos agad ang x in set. Kung paulit-ulit kang tumitingin ng halaga sa malaking list sa loob ng loop, gawin muna itong set.
Buod
Ang python list ay maayos at mababagong koleksiyon: idinadagdag ng append at extend, tinatanggal ng pop at remove, kinukuha ng slice na a[start:stop:step] ang mga bahagi, inaayos ng sort sa mismong lugar at nagbabalik ng None, at ang sorted ay nagbibigay ng bagong list. Gumawa ng kopya nang tahasan, kumuha ng tuple para sa nakapirmeng rekord, at set para sa mga natatanging halaga. Ang mga list, tuple, dictionary, at set ay tinalakay nang praktikal sa kursong "Python 3.15: mula baguhan hanggang propesyonal".
Mga madalas itanong
Ano ang pagkakaiba ng list at array sa Python?
Walang built-in na array na tulad sa ibang wika; ang list ang gumaganap nito, at maaari itong maglaman ng magkakaibang uri ng halaga. Para sa siksik na numerikong array, may module na array at ang library na NumPy.
Paano hanapin ang index ng elemento sa list?
Ibinabalik ng a.index(x) ang index ng unang pagkakataon, at magbibigay ito ng ValueError kung wala ang elemento. Kaya bago tawagin, suriin muna ang x in a.
Paano tanggalin ang mga duplicate sa list nang hindi nawawala ang pagkakasunod?
Gamitin ang list(dict.fromkeys(a)): iniimbak ng dictionary ang mga key na natatangi at ayon sa pagkakapasok. Tinatanggal din ng list(set(a)) ang duplicate, pero hindi nito pinananatili ang pagkakasunod.
Paano pagsamahin ang list ng string sa iisang string?
Gamit ang join method ng string: ", ".join(["a", "b", "c"]) ay nagbibigay ng "a, b, c". Dapat string lahat ng elemento; i-convert muna ang mga numero gamit ang map(str, a).
Puwede bang maglaman ng iba't ibang uri ng halaga ang isang list?
Oo, maaaring maglaman ang list ng numero, string, iba pang list, at iba't ibang object nang sabay. Pero karaniwang hindi ito maaaring i-sort nang walang parameter na key — magbibigay ng TypeError ang paghahambing ng numero at string.
Detalyadong tinatalakay ang paksang ito, may praktis, sa kursong “Python 3.15: от новичка до профи”.
Pumunta sa kurso