Friday, July 24, 2015

თავი 10 (10,1 - 10,2)



თავი 10


Tuples



10.1 Tuples უცვლელია



Fun fact: The word “tuple” comes from the names given to sequences of numbers of varying lengths: single, double, triple, quadruple, quituple, sextuple, septuple, etc.
მხიარული ფაქტი: სიტყვა tuple მოდის ციფრების ცვალებადი სიგრძის სახელებიდან: single, double, triple, quadruple, quituple, sextuple, septuple, და...

tuple არის მნიშვნელობათა რიგი - სიის მსგავსად. tuple - ში მოთავსებული მნიშვნელობები შეიძლება იყოს ნებისმიერი ტიპის და ინდექსირებულია მთელი რიცხვებით. მნიშვნელოვანი განსხვავება ისაა, რომ tuple უცვლელია. tuple არის შედარებადი და hashable, ასე რომ შეგვიძლია გავასწოროთ მათი სია და გამოვიყენოთ, როგორც გასაღები მნიშვნელობა პითონის ლექსიკონებში.

სინტაქსურად tuple არის მძიმით გამოყოფილი მნიშვნელობათა სია.

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


მიუხედავად იმისა, რომ აუცილებელი არაა, ადვილად იდენტიფიკაციისთვის რეკომენდირებულია tuple -  ს ფრჩხილებში ჩასმა:

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

ერთ ელემენტიანი tuple  - ს გაკეთებისას მძიმის დასმა აუცილებელია:

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

მძიმის გარეშე პითონი ('a' - ს) განიხილავს როგორც გამოსახულებას რომელიც წარმოადგენს სტრინგს:

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

tuple  - ს გაკეთება ასევე შეიძლება ჩაშენებული ფუნქციითაც, რომელიც აკეთებს ცარიელ tuple  - ს არგუმენტების გარეშე:

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

არგუმენტი თუ თანრიგია(სტრინგის, სიის ან tuple - ის), tuple  - ს გამოძახების შედეგი იქნება tuple  თანრიგის ელემენტებით:

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

არ გამოიყენო tuple ცვლადის სახელად.
სიის უმეტესი ოპერატორები tuple  - სთანაც მუშაობს. კვადრატული ფრჩხილის ოპერატორი ელემენტებს აინდექსირებს:

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

დაჭრის ოპერატორი ელემენტებს ნიშნავს დიაპაზონში:

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

მაგრამ თუ ცდი tuple  - ის ელემენტის მოდიფიცირებას, მიღებ შეცდომას:

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

tuple  - ის ელემენტის მოდიფიცირება არ შეგიძლია, თუმცა შეგიძლია ერთი tuple  - ის მეორეთი ჩანაცვლება:

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

10.2 tuple - ბის შედარება

შედარების ოპერატორების მუშაობა tuple  -სთან და სხვა თანრიგებთან; პითონი იწყებს პირველი ელემენტის შედარებას  ყოველი თანრიგიდან, თუ თანაბარია, გადადის შემდეგ ელემენტზე და.ა.შ. სანამ არ იპოვნის განსხვავებულ ელემენტებს.  მომდევნო ელემენტები არ განიხილება(თუნდაც ძალიან დიდი იყოს).

>>> (0, 1, 2) < (0, 3, 4)
True
>>> (0, 1, 2000000) < (0, 3, 4)
True

sort ფუნქცია მუშაობს იგივენაირად.თავდაპირველად ალაგებს პირველ ელემენტებს მაგრამ ტოლობის შემთხვევაში ალაგებს მეორე ელემენტით და.ა.შ.

ეს მახასიათებელი ვარგისია ნიმუშისთვის DSU თანრიგის მოსამართად სიების თუპლების გაკეთებით თანრიგის ელემენტების წინ ერთი ან მეტი sort keys.
Sort - დახარისხება  tuple  - ბის სიისა sort ფუნქციით
Undecorate - თანრიგის დახარისხებული ელემენტების არევა.

(This feature lends itself to a pattern called DSU for Decorate a sequence by building a list of tuples with one or more sort keys preceding the elements from the sequence,

Sort the list of tuples using the Python built-in sort, and

Undecorate by extracting the sorted elements of the sequence.)





მაგალითად დავუშვათ გაქვს სიტყვების სია და გინდა რომ დაახარისხო კლებადობის მიხედვით:

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


პირველი მარყუჟი აკეთებს თუპლების სიას, სადაც ყოველი თუპლი არის სიტყვა და ამ სიტყვის სიგრძე.

sort ადარებს პირველ ელემენტს, პირველად სიგრძეს და მხოლოდ შემდეგ განიხილავს მეორე ელემენტს to break ties. sort - ის არგუმენტი reverse=True - ით ხარისხდება კლებადობის მიხედვით.

მეორე მარყუჟი გადაკვეთს თუპლის სიას და აკეთებს სიტყვების სიას სიგრძის კლებადობის მიხედვით. So among the five character words, დალაგებული ანბანის საპირისპიროდ. ასე რომ  ამ სიაში “what” არის  “soft” - მდე  .

პროგრამის ამონაბეჭდი არის შემდეგი:

['yonder', 'window', 'breaks', 'light', 'what',
'soft', 'but', 'in']

რა თქმა უნდა აბზაცის პოეტურობას დარტყმა ადგება, როცა პითონის მარწუხებში ხვდება.