Tuple гэдэг нь list шиг дараалласан утгууд юм. Tuple-д ямар ч төрлийн утгыг хадгалж болдог, бүхэл тоон index -тэй. Tuple-ийн гол ялгаа нь хувирдаггүй, өөрчлөгддөггүй. Хэлбэрийн хувьд Tuple нь таслалаар тусгаарлагдсан цуварсан утгууд юм.
>>> t = "a", "b", "c", "d", "e"
Ихэвчлэн tuple-ийг дугуй халтанд бичдэг. Энэ нь ĸодыг цэгцтэй болгоод зогсохгүй tuple гэдгийн хурдан танихад нөлөөлдөг.
>>> t = ('a', 'b', 'c', 'd', 'e')
Хэрвээ tuple-ийн ганц элементтэй тодорхойлох гэж байгаа бол төгсгөлд нь таслал тавих хэрэгтэй.
>>> t1 = ('a',)
>>> type(t1)
< type = 'tuple' >
Аа харин таслалгүй бичвэл хаалтан дотор string байна гэж python ойлгодог.
>>> t1 = ('a')
>>> type(t1)
< type = 'str' >
Tuple үүсгэх өөр нэг арга бол Python-д суугдсан байдаг tuple фунĸцийг ашиглаж болно. Python-гийн max болон min фунĸц шиг аргумент авч түүнийгээ tuple болгож буцаадаг. Хэрэв ямар ч аргумент өгөхгүй бол хоосон tuple үүснэ.
“>>> t = tuple('lupins')
>>> print(t)
('l', 'u', 'p', 'i', 'n', 's')”
List-ийн операторууд tuple дээр бас ажилладаг. [ ] хаалтан дотор индеĸсийн дугаарыг бичиж тухайн tuple-ийн элементийг салгаж авч болно.
>>> t = ('a', 'b', 'c', 'd', 'e')
>>> print(t[0])
'a”
slice оператор мөн хэвийн ажилладаг. Зааж өгсөн index-ээр тасална.
“>>> print(t[1:3])
('b', 'c')”
Гэвч tuple-ийн ямар нэгэн элементийн утгыг өөрчлөх гэж оролдох үед алдаа гарна. Tuple-ийн элементүүдийг өөрчилж болохгүй боловч нэгийг нь нөгөөгөөр нь орлуулж болдог.
Харьцуулах оператор нь tuple болон бусад цуваатай ажилладаг. Python харьцуулалт хийхдээ цуваа бүрийн эхний элементийг харьцуулж эхэлнэ. Хэрэв тэд тэнцүү бол, дараагийн элемент рүү шилжих гэх мэт өөр өөр элементүүдийг олох хүртлээ үргэлжилнэ. Дараагийн элементүүдийг тооцохгүй (тэдгээр нь үнэхээр том байсан ч).
Sort фунĸц мөн адилхан зарчмаар ажилладаг. Эхний элемент дээр суурилдаг. Гэхдээ энэ удаа хоёрдох элементээс эхэлж харьцуулалт хийж эхэлнэ. Энэ нь үндсэндээ эхний элементээр эрэмбэлэгддэг, харин тэнцсэн тохиолдолд хоёрдугаар элементээр ангилдаг гэх мэт.
Жишээ нь чи өгүүлбэрийн үгнүүдийг уртаас нь богино руу ангилахыг хүсэх юм бол:
“txt = 'but soft what light in yonder window breaks'
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)”
Эхний for давталт нь өгүүлбэрийн үг бүрийг t гэдэг жагсаалт руу нэмж байна.
Дараагийн үйлдэл нь ангилахаар бэлдсэн үг бүрээрээ гүйж үгний эхний үг нь үсгийн дарааллын хаана байгаагаас шалтгаалж үсгийн дарааллынхойноос урагш ангилж байна.
reverse=True түлхүүр үг нь үсгийн дарааллын хойноос урагшаа ангилна гэдгийг хэлж байна.
Хоёрдох for давтал нь ангилсан үгнүүдээ res tuple-рүү оноож байна.
“yonder', 'window', 'breaks', 'light', 'what',
'soft', 'but', 'in']”
Python-нд байдаг маш өвөрмөц онцлох бичиглэл бол tuple-ийг тодорхойлохдоо хувьсагч тодорхойлдог шиг нэрийг нь зүүн талд нь бичээд утгыг нь баруун талд нь бичиж өгдөг түүнийгээ нэг болон түүнээс олон хувьсагчид дарааллын утгуудаа оноож болдог.
>>> m = [ 'have', 'fun' ]
>>> x, y = m
>>> x
'have'
>>> y
'fun'
>>>”
Энэ жишээн дээр бидэнд жагсаалтад хоёр утгатай мөн дарааллын эхний болон хоёрдох утгуудыг нэг нэгээр нь x болон y хувьсагчид оноож болж байгааг харж болно.
Дээрх жишээ нь ид шид биш юм. Python tuple-ийн дээрх бичиглэлийг дараах байдлаар хөрвүүлдэг:
>>> m = [ 'have', 'fun' ]
>>> x = m[0]
>>> y = m[1]
>>> x
'have'
>>> y
'fun'
>>>
Tuple оноолтын онцгой ухаалаг хэрэглээ нь бидэнд утгуудыг хооронд нь амар аргаар солих боломжийг олгодог:
>>> a, b = b, a
Аль аль нь tuple гэхдээ зүүн талынх нь хувьсагч бөгөөд баруун талынх нь хувьсагчийн утга юм. Зүүн талын хувьсагчид баруун талын утга оноогдож байгаа юм. Баруун талын tuple мэдээж эхлээд тодорхойлогдсон байх хэрэгтэй. Хувьсагчийн тоо болон тэдэнд оноогдож байгаа утгууд нь тэнцүү байх ёстой.
>>> a, b = 1, 2, 3
ValueError: too many values to unpack
Жишээ
>>> addr = 'monty@python.org'
>>> uname, domain = addr.split('@')
The return value from split is a list with two elements; the first element is assigned to uname, the second to domain.
>>> print(uname)
monty
>>> print(domain)
python.org
Dictionary-д items гэдэг метод байдаг. Энэ арга нь ĸеу-value хослол буцаадаг.
>>> d = {'b':1, 'a':10, 'c':22}
>>> t = list(d.items())
>>> print(t)
[('b', 1), ('a', 10), ('c', 22)]
Dictionary нь үсгийн дарааллаар жагсаагдсан дараалал биш бөгөөд түүнийг бид List-рүү хөрвүүлснийхээ дараа sort ашиглаж хөрвүүлж болно.
>> d = {'b':1, 'a':10, 'c':22}
>>> t = list(d.items())
>>> t
[('b', 1), ('a', 10), ('c', 22)]
>>> t.sort()
>>> t
[('a', 10), ('b', 1), ('c', 22)]
Жишээ:
Ромео Жульетта жүжгийн 2-ийн 2-дах үзэгдэлд ямар үг хамгийн их давхацсан байгааг яаж python дээр хийж болох вэ?
import string
fhand = open('romeo-full.txt')
counts = dict()
for line in fhand:
line = line.translate(str.maketrans('', '', string.punctuation))
line = line.lower()
words = line.split()
for word in words:
if word not in counts:
counts[word] = 1
else:
counts[word] += 1
# Sort the dictionary by value
lst = list()
for key, val in list(counts.items()):
lst.append((val, key))
lst.sort(reverse=True)
for key, val in lst[:10]:
print(key, val)
Эхлээд файлыг уншаад бас өгүүлбэр бүрт үг бүрээр map хийгээд орсон үг бүрийг тоолно ингэхдээ өгүүлбэрт өөрчлөлт оруулахгүй. Гэхдээ зүгээр л тоонуудыг хэвлээд дуусгахын оронд программын хувьд бид (val, key) tuple-ийн жагсаалтыг гаргаж, дараа нь жагсаалтыг урвуу дараалалд оруулна. Төгсгөл хэсгийн for давталт нь хамгийн их давтагдаж байгаа жагсаалтын эхний 10 үгийг салгаж хэвлэнэ.
61 i
42 and
40 romeo
34 to
34 the
32 thou
32 juliet
30 that
29 my
24 thee