Събиране на данни¶
В предишния урок използвахме комплект, за да изпълняваме някои команди (изчисляване и печат) над всяка стойност от комплекта, използвайки for цикъл.
Комплектите също са тип данни в Python, като числа, низове или логически стойности. Типовете int (integer), float (реално число), str (string) и bool (логическа стойност) са основни типове. Разликата между комплектите и основните типове е, че стойността на комплект се състои от множество стойности от по-опростен тип.
Всяка стойност, която се състои от множество стойности от по-опростен тип, ще се нарича колекция. Данните, от които се събира колекцията, се наричат елементи за събиране.
Можем да кажем, че комплектът е вид колекция и това е първият вид колекция, който срещаме.
Комплект (Tuple) и неговите елементи¶
Опаковане и разопаковане на комплектите¶
Можем да поставим целия комплект в променлива, както правим със стойности от по-прост тип. В следващия пример, променливата на температурата съдържа целия комплект като неговата стойност.
Този вид присвояване на стойност (както в първия ред на програмата) е известен като пакетиране на комплект. Възможно е и обратното присвояване: когато знаем колко елемента има в комплект, можем да присвоим елементите на комплекта на съответния брой променливи:
Твърдения като first_name, middle_name, last_name = full name
се наричат отваряне на комплекта
Същият ефект се постига чрез свързано твърдение
first_name, middle_name, last_name = "Arthur", "Conan", "Doyle"
Комплектите не се появяват в това изявление, което се нарича присвояване на множество стойности.
Елементи и индекси¶
Можем да получим и елементите на комплект, като напишем името на комплекта, а зад него в квадратни скоби поредният номер на елемента, който искаме. Тук трябва да се отбележи, че преброяването на елементите на всяка колекция започва от нула. Например:
Поредният номер на елемент се нарича също индекс на елемента. ако комплектът има n елемента, можем да използваме числата 0, 1, 2, … n-1 като индекси. В горния пример n = 3, така че са разрешени индекси 0, 1 и 2. Опитът да използвате индекс извън тези граници причинява грешка (опитайте).
Дължина на комплектите¶
Броят на елементите на комплека може да се получи с помощта на функцията len.
или по-кратко:
Обърнете внимание на двойните скоби (едната за функция, а другата за комплект).
Чрез тези примери видяхме, че комплектните елементи могат да бъдат числа или низове. Всъщност елементите на комплекта могат да бъдат от всякакъв тип, основни или сложни.
Например, възможно е да се създаде пакет от комплекти:
Комплекта t съдържа два по-прости комплекта, следователно броят на неговите елементи е 2.
В Python елементите на един комплект могат да бъдат от различни типове и такива примери ще видим последни.
Обхват¶
Обхватът е друг вид колекция. За разлика от комплекта, елементите тук винаги са цели числа.
Обхватът може да бъде определен по няколко начина.
Обхват с един аргумент¶
Най-простата форма за определяне на диапазон е range(n), където n е положително цяло число. Диапазонът range(n) съдържа цели числа от 0 до n, без да включва n. Например, range(5) съдържа стойности 0, 1, 2, 3, 4.
Виждаме, че в оператора for можем да използваме диапазона по същия начин като комплекта. Всъщност, всяка колекция може да бъде на мястото на комплекта или гамата.
Тъй като range(n) съдържа общо n стойности, този диапазон често се използва, когато командата трябва да се повтаря n пъти по същия начин:
Функцията за печат беше изпълнена за всяка стойност i от последователност 0, 1, 2, 3, 4, но в този пример тези стойности не се използват в тялото на цикъла. Така постигнахме, че функцията за печат се изпълнява 5 пъти по абсолютно същия начин, тоест тя се повтаря 5 пъти.
Друго често срещано използване на този тип гама е да преминете през всички елементи на комплект. В такъв случай променливата на цикъла служи като индекс. Този начин на преминаване през стойностите на комплекта е подходящ, когато освен тези стойности на комплекта в цикъла имаме нужда и от техните последователни номера (този начин на преминаване през колекцията е по-често срещан в други езици за програмиране от Python).
Обхват с два аргумента¶
Когато се нуждаем от последователност от последователни цели числа, които не започват от нула, задаваме диапазона като range(a, b), където a и b са цели числа, така че a <b. Тогава последователността е съставена от цели числа от a до b, без да се включва b. Например диапазонът на range(1, b) дава последователността от числа 1, 2, 3, 4, 5:
Обхват с три аргумента¶
Третата форма за определяне на диапазон има три аргумента:
Стойностите на диапазона, дадени от диапазон (a, b, c), включва от a до b (без да се включва b) със стъпка c, т.е. стойностите се променят с c. Стъпка c също може да бъде отрицателна:
Можем да преобразуваме диапазон в комплект (обратното не е възможно, нито някога е необходимо):
Низовете(strings) като колекция¶
Досега сме използвали низове като основен тип, но низовете могат да се използват и като колекции от отделни знаци. Можем да преместваме низови символи с помощта на цикъл и да извличаме отделни символи, използвайки индекси:
Функции на колекциите¶
В Python има много функции, които приемат колекция като аргумент. Една от тях е функцията len, която вече срещнахме. Някои други често използвани функции, които се прилагат за колекциите, са:
min, функция, която дава най-малкия елемент от колекция
max, функция, която дава най-големия елемент от колекция
sum, функция, която дава сумата от елементите на колекция
Стойностите на функциите len, sum, min, max за диапазона също могат да бъдат определени от параметрите на диапазона, но тук искахме да отбележим, че всички тези функции приемат различни колекции като свой аргумент (включително диапазон).
Въпроси¶
- a program error occurs
- Try again
- 2
- Try again
- 20
- Correct
- 3
- Try again
Q-28: Какво отпечатва следната програма?
t = (32, 41, 20, 17)
a, b, c, d = t
print(c)
- 1
- Try again
- 2
- Correct
- a program error occurs
- Try again
- 3
- Try again
Q-29: Какво отпечатва следната програма?
a = (1, 2, 3)
print(a[1])
- range(4)
- Try again
- range(1, 4)
- Correct
- range(3)
- Try again
- range(1, 3)
- Try again
Q-30: Кой диапазон съдържа само стойности 1, 2, 3?
- 5
- Correct
- 6
- Try again
- 9
- Try again
- 10
- Try again
Q-31: Колко стойности съдържа диапазонът (1, 10, 2)?
-
Q-32: Свържете обхватите с броя елементи
Try again!
- 5
- range(5)
- 0
- range(3, 3)
- 3
- range(1, 4)
- 1
- range(3, 6, 3)
-
Q-33: Свържете обхватите със стойностите
Try again!
- 3, 4, 5
- range(3, 6)
- 0, 1, 2
- range(3)
- 3, 1
- range(3, -1, -2)
- 3, 2, 1, 0, -1
- range(3, -2, -1)
- 3
- range(3, 6, 3)