Labas, Pasauli!

Sąrašo elementų keitimas ir atnaujimas

VP
Vilius P.
2024-07-30
2024-09-24

Gilinsimės į sąrašų manipuliavimo metodus. Mokysimės, kaip efektyviai pridėti, pašalinti ir keisti sąrašo elementus, gauti naują sąrašą transformuojant esantį.

Elemento keitimas naudojantis indeksą

Kadangi žinome, kaip pasiekti bet kurį sąrašo elementą naudojantis indeksais, nesunkiai pakeisime ir pasirinktame indekse esantį elementą. Pirmiausiai nurodysime, kurį elementą norime keisti, o tada naudojantis lygybės ženklu priskirsime naują reikšmę:

.py
customer_names = ["Dwain", "Catarina", "Nelia", "Melita", "Tedd"]
print("Before changing:")
print(customer_names)

customer_names[1] = "Vilius"
print("After changing")
print(customer_names)

Įvykdžius šį kodą, matome tokį rezultatą konsoliniame lange:

text
Before changing:
['Dwain', 'Catarina', 'Nelia', 'Melita', 'Tedd']
After changing
['Dwain', 'Vilius', 'Nelia', 'Melita', 'Tedd']

Pakeitėme sąraše antrąjį elementą (indeksas 1) ir sąrašas pasikeitė. Taip galima pakeisti bet kurioje pozicijoje esantį elementą.

Reiktų atkreipti dėmesį į kraštutinį atvejį (angl. edge case), kai bandomamas pakeisti elementas su indeksu, kuris mažesnis nei sąrašo dydis. Paimkime tą patį sąrašą ir pabandykime pakeisti elementą esantį inkdekse 10:

.py
customer_names = ["Dwain", "Catarina", "Nelia", "Melita", "Tedd"]
customer_names[10] = "George"

Įvykdę kodą pamatysite įvykusią klaidą, kuri ganėtinai aiškiai aprašo iškilusią problemą:

text
IndexError: list assignment index out of range

Elementų pridėjimas

Toliau pasižiūrėkime, kaip trimis metodais galime pridėti naujus elementus į sąrašą.

append()

Žodis append reiškia pridėjimą prie galo. Tokia pat šio žodžio reikšmė python kalboje. Šiuo metodu pridėsime elementą prie sąrašo galo, taip jį praplėsdami. Pavyzdžiui:

.py
shopping_list = ["1,5 kg of apples", "chuck steak", "toilet paper", "tomato paste"]
print("Shopping list before append")
print(shopping_list)

shopping_list.append("Gouda cheese")
print("Shopping list after append:")
print(shopping_list)

Įvykdžius kodą, gauname:

text
Shopping list before append
['1,5 kg of apples', 'chuck steak', 'toilet paper', 'tomato paste']
Shopping list after append:
['1,5 kg of apples', 'chuck steak', 'toilet paper', 'tomato paste', 'Gouda cheese']

Tą patį galima padaryti ir su tuščiu sąrašu:

.py
abc = []
abc.append("a")
abc.append("b")
abc.append("c")
abc.append("d")
print(abc) # prints: ['a', 'b', 'c', 'd']

Daugiau panaudojimo atvejų pamatysite toliau - pavyzdžiuose.

insert()

Su insert() metodu galima elementą įterpti į bet kurią sąrašo vietą.

.py
elements = ["e1", "e2", "e3", "e4", "e5"]
print("List before insert:")
print(elements)

elements.insert(4, "f")
print("List after insert")
print(elements)

Šiuo atveju elementas įterpiamas į indeksą - naujai įterpto elemento indeksas yra 4, toks kokį nurodėme pirmajame argumente. Antrajame metodo argumente nurodomas elementas, kurį norime įterpti.

Sąrašų sujungimas

Sujungti sąrašą galima dviem būdais su metodu extend() ir pliuso ženklu +:

.py
list_1 = [1, 2]
list_2 = [3, 4]

list_1.extend(list_2)
print(f"list_1.extend(list_2): {list_1}") # Modifies original list

list_a = ["a", "b"]
list_c = ["c", "d"]
print(f"list_a+list_c: {list_a+list_c}") # Does not modify original list

Rezultatas

text
list_1.extend(list_2): [1, 2, 3, 4]
list_a+list_c: ['a', 'b', 'c', 'd']

Atkreipkite dėmesį, kad su extend() metodu pakeičiame sąrašą, o sudedant - ne.

Elemento pašalinimas

Elemento pašalinimui iš sąrašo naudosime remove() ir pop() metodus. Vienu atveju nurodysime elemento reikšmę, kitu - indeksą.

remove()

Naudojant remove() metodą reikia nurodyti elementą, kurį norime pašalinti:

.py
# Words from https://www.youtube.com/watch?v=PKQPey6L42M
coconut_song = ["The", "coconut", "nut", "is", "not", "a", "giant", "nut"]
print("Coconut song before remove:")
print(coconut_song)

coconut_song.remove("not")
print("Coconut song after \"not\" remove:")
print(coconut_song)

Rezultatas:

text
Coconut song before remove:
['The', 'coconut', 'nut', 'is', 'not', 'a', 'giant', 'nut']
Coconut song after "not" remove:
['The', 'coconut', 'nut', 'is', 'a', 'giant', 'nut']

Prieš ištrinant būtina įsitikinti, kad nurodytas elementas egzistuoja sąraše:

.py
fruits = ["pineapple", "dragonfruit", "durian", "rambutan", "mango"]
fruits.remove("ananas")

Įvykdžius tokį kodą, kuriame trinamo elemento sąraše nėra, išmetama klaida:

text
ValueError: list.remove(x): x not in list

Kaip ir kaskart atsiradus klaidai, perskaitykite klaidos žinutę, iš kurios galėsite suprasti, kur padaryta klaida.

pop()

Metodą pop() naudosime, kai elementą norėsime pašalinti nurodant indeksą. Tarkime turime sąrašą su daržovėmis ir žinome, kad elementas, kurio indeksas yra 1, yra ne daržovė, todėl jį reikia pašalinti:

.py
vegatables = ["onion", "chicken thights", "garlic", "tomato", "potato"]
print("Vegatables before pop:")
print(vegatables)

vegatables.pop(1)
print("Vegatables after popping element (index 1):")
print(vegatables)

Rezultatas:

text
Vegatables before pop:
['onion', 'chicken thights', 'garlic', 'tomato', 'potato']
Vegatables after popping element (index 1):
['onion', 'garlic', 'tomato', 'potato']

Užduotys

1. Skaičiai dalūs iš 7

Sukurkite sąrašą skaičių nuo a(įskaitant) iki b(įskaitant), kurie dalijasi be liekanos iš 7. Skaičius a iki b turi įvesti programos naudotojas.

2. Skaičių pašalinimas

Sukurkite programą, kuri iš sąrašo pašalintų skaičius, kurie yra mažesni negu nurodytas (įvestas iš konsolės). Nurodykite kiek skaičių buvo pašalinta iš sąrašo.

Programa turi pabaigti darbą, jeigu įvestis (tekstas) nėra skaičius arba (sudėtingiau) iš naujo paprašyti, kad vartotojas įvestų skaičių.

Programos išvesties pavyzdys:

text
Initial list:
[10, 25, 25.55, 200, -10, 55]
Input threshold number: 25

2 numbers were removed:
[25, 25.55, 200, 55]

3. Darbų sąrašas

Sukurkite programą, kuri pašalintų atliktą darbą (pagal eilės numerį) iš darbų sąrašo.

Pavyzdinis darbų sąrašas:

.py
todo_list = [
    "Buy groceries",
    "Finish homework",
    "Call mom",
    "Clean the house",
    "Pay electricity bill",
    "Walk the dog",
    "Read a book for 30 minutes",
    "Prepare dinner",
    "Water the plants",
    "Schedule a meeting with the team"
]

Programos išvesties pavyzdys:

text
Your todo list:
0. Buy groceries
1. Finish homework
2. Call mom
3. Clean the house
4. Pay electricity bill
5. Walk the dog
6. Read a book for 30 minutes
7. Prepare dinner
8. Water the plants
9. Schedule a meeting with the team

Select the number of the task you have completed: 3

Updated to-do list:
0. Buy groceries
1. Finish homework
2. Call mom
3. Pay electricity bill
4. Walk the dog
5. Read a book for 30 minutes
6. Prepare dinner
7. Water the plants
8. Schedule a meeting with the team

4. Savaitės temperatūra

Sukurkite programą, kurioje apskaičiuojamas savaitės temperatūros vidurkis, įvedant vartotojui temperatūra į konsolinį langą.

Programos išvestis galėtų atrodyti taip:

text
Enter the temperature for day 1: 31
Enter the temperature for day 2: 28
Enter the temperature for day 3: 25
Enter the temperature for day 4: 25
Enter the temperature for day 5: 27
Enter the temperature for day 6: 22
Enter the temperature for day 7: 30
Temperatures for the week: [31.0, 28.0, 25.0, 25.0, 27.0, 22.0, 30.0]
Average temperature: 26.86

5. Žaidimas - akmuo, žirklės, popierius

Žaidimo esmė - pasirinkti vieną iš trijų ženklų ir laimėti prieš kompiuterį

Žaidimo reikalavimai:

  • Žaidimas nesibaigiantis, žaidžiama, kol žaidėjas išjungia žaidimą arba pasirenką specialų simbolį (jūsų sugalvotas, pvz.: 'Q');
  • Po kiekvienio raundo, parodoma statistika, kiek žaidėjas kartų laimėjo prieš kompiuterį ir kiek buvo raundų;
  • Įvedus specialių simbolį (pvz.: 'H'), parodama visų raundų istorija, pvz.: "1. žirklės - popierius; 2. žirklės - akmuo; 3. popierius - akmuo...";

Taisyklės:

  • Akmuo laimi prieš žirkles;
  • Žirklės laimi prieš popierių;
  • Popierius laimi prieš akmenį;

Vietoje rašymo viso ženklo žodžio į konsolę, žaidėjas galėtų pasirinkti skaičių nuo 1-3, kurie reprezentuotų akmenį, žirkles ir popierių. Žaidimo pradžia konsolėje galėtų atrodyti taip:

text
Žaidimas - akmuo, žirklės, popierius

Instrukcija:
Kiekviename raunde kompiuteris sugalvos savo ženklą, o jūs su skaičiais turite pasirinkti vieną iš trijų ženklų;
1 - akmuo
2 - žirklės
3 - Popierius

Papildomos komandos:
q - žaidimo išjungimas
h - raundų istorija

Taisyklės:
...

Pasirinkite ženklą:
...

6. Žaidimas - atspėk skaičių

Žaidimo esmė - atspėti skaičių (sveikąjį), kurį jūsų programa sugeneruoja atsitiktinai.

Žaidimo reikalavimai:

  • Turi prasidėti dviejų skaičių įvedimu (konsoliniame lange), pagal kuriuos bus generuojamas skaičius;
  • Spėjimas vykdomas įvedant skaičių į konsolinį langą;
  • Žaidimas turi turėti bandymų skaičių, kuriuos išnaudojus žaidimas pralaimimas;
  • Žaidimas laimimas atspėjus skaičių;
  • Po kiekvieno spėjimo žaidimas turi pranešti, ar įvestas skaičius didesnis ar mažesnis už atsiktiktinį;
  • Žaidimo gale turi būti pavaizduoti visi spėjimai.
  • Papildomas: įvedus kažką kito negu skaičių, programa turi pranešti, kad įvestas tekstas nėra skaičius;

Žaidimo eiga galėtų atrodyti taip:

text
=========================================
Žaidimas - atspėkite skaičių
=========================================
Įveskite generavimo intervalo pirmąjį skaičių:
2

Įveskite generavimo intervalo antrajį skaičių:
143
----------------------------------------------
Pradėkite spėjimus (nuo 2 iki 143)
1 bandymas: 4
Neatspėjote skaičiaus, sugalvotas skaičius didesnis už jūsų bandymo skaičių.

2 bandymas: 143
Neatspėjote skaičiaus, sugalvotas skaičius mažesnis už jūsų bandymo skaičių.

3. bandymas: 7
Atspėjote skaičių!

Rezultatas: 3/7
Jūsų spėjimai: 4, 143, 7

Sukurta
su meile

Kontaktai

2024 — Vilius P.