05 List/String Methods; Ternary Operators; List Comprehensions

image.png Արագածոտն, լուսանկարի հղումը, Հեղինակ՝ Ani Adigyozalyan

Open In Colab (ToDo)

You real me out when you string.cut()
(c) Radiohead

🎦 Տեսադասեր + լրացուցիչ

  1. Տեսություն 2025
  2. Տեսություն 2023 (ToDo)
  3. Գործնական 2025 (ToDo)
  4. Գործնական 2023 (ToDo)
  5. Որոշ տնայինների լուծումներ (ToDo)

Նշումներ։ Ստեղ կարող եք գրել թե profound-ից որ խնդիրների համար կուզեք տեսնել վիդեո լուծումներ, կամ կուզեիք մենք քննարկենք

📚 Նյութը

String methods լիքը ուրիշ մեթոդներ

մեծատառ / փոքրատառ

anun = "JoHn"
azganun = 'smith'
mard = 'john smith'
print(anun)
print(anun.lower())
JoHn
john
print(anun)
print(anun.upper()) # uppercase
JoHn
JOHN
print(mard)
print(mard.title())
john smith
John Smith
print(mard)
print(mard.capitalize())
john smith
John smith
print(anun)
print(anun.swapcase())
JoHn
jOhN

սկիզբ/վերջը ստուգել

a = 'panir.com'
b = 'panir hamov'
print(a.startswith('panir')) # a[:5] == "panir"


# հեռացնել
print(a.removeprefix('panir'))
# փոխումա՞ թե չէ
print(a)

# a = a.removeprefix('panir')
# print(a)
True
.com
panir.com
.com
print(a.endswith('.com'))
print(b.endswith('.com'))

# հեռացնել
print(a.removesuffix('.com'))
True
False
panir
print(a.startswith(("www", "panir", "http")))

# ()-ն tuple ստեղծելու համար ա, դա հաջորդ
# դասին ենք անցնելու
True

ստուգել ինչերից ա բաղկացած

tar_tiv = 'asdasdvAFASD122313'
xary = 'mynhtgfe12312$%$%@asda'
tarer = 'rfedsaasd'
tver = '12350911509'
print(tar_tiv.isalnum()) # alphabetic, numeric
print(xary.isalnum())
True
False
print(tarer.isalpha())
print(tver.isalpha())
True
False
print(tver.isdigit())
print(tarer.isdigit())
True
False

տեքստից ցուցակ, և հակառակը

a = 'Ողջույն բոլորին, բարևներ, պրիվեեեետ'
list(a)
a.split()
['Ողջույն', 'բոլորին,', 'բարևներ,', 'պրիվեեեետ']
a.split(', ')
['Ողջույն բոլորին', 'բարևներ', 'պրիվեեեետ']
a = "11 2 3     5     asd \
4 \
5"

a.split()
['11', '2', '3', '5', 'asd', '4', '5']

Հիմա հակառակը

barer = ['Ողջույն բոլորին', 'բարևներ', 'պրիվեեեետ']
str(barer)
"['Ողջույն բոլորին', 'բարևներ', 'պրիվեեեետ']"
print(" ".join(barer))
print('Ողջույն բոլորին', 'բարևներ', 'պրիվեեեետ', sep=" ")
Ողջույն բոլորին բարևներ պրիվեեեետ
Ողջույն բոլորին բարևներ պրիվեեեետ
", ".join(barer)
'Ողջույն բոլորին, բարևներ, պրիվեեեետ'
"&&&".join(barer)
'Ողջույն բոլորին&&&բարևներ&&&պրիվեեեետ'

հաշվել, գտնել, փոխել

s = 'abc bc a a aaa'
print(s.count('a'))
print(s.count('bc'))
6
2
print(s.find('bc')) # առաջին հանդիպածն ա վերադարձնում
print(s.index('bc'))
1
1
print(s.find('d'))
-1
print(s.index('d'))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [32], in <cell line: 1>()
----> 1 print(s.index('d'))

ValueError: substring not found

Replace

s = 'բառև, եռբ ես գալու, ու՞ռ ես'
s.replace('ռ', 'ր')
'բարև, երբ ես գալու, ու՞ր ես'
print(s)

s = s.replace('ռ', 'ր')

print(s)
բառև, եռբ ես գալու, ու՞ռ ես
բարև, երբ ես գալու, ու՞ր ես

բացատազերծել

s = '         ասդասդադւըյըտռտեռֆ տգտռ,,, ե,         դգֆաաա   '

print(s.strip())

s = '--------         ասդասդադւըյըտռտեռֆ տգտռ,,, ե,         դգֆ   ---'

print(s.strip("-"))
ասդասդադւըյըտռտեռֆ տգտռ,,, ե,         դգֆաաա
         ասդասդադւըյըտռտեռֆ տգտռ,,, ե,         դգֆաաա   
s = '         ասդասդադւըյըտռտեռֆ տգտռ,,, ե,         դգֆաաա   '

print(s.lstrip()) # left strip
print(s.rstrip())
ասդասդադւըյըտռտեռֆ տգտռ,,, ե,         դգֆաաա   
         ասդասդադւըյըտռտեռֆ տգտռ,,, ե,         դգֆաաա
maqrac_s = ""
for i in s:
    if i != "ա":
        maqrac_s += i
print(maqrac_s)
         սդսդդւըյըտռտեռֆ տգտռ,,, ե,         դգֆ   

List methods

միավորում

mrger_1 = ['խնձոր', 'բանան']

mrger_1.append("sjadad")

print(mrger_1)

mrger_1.append(1,2,3)
['խնձոր', 'բանան', 'sjadad']
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [44], in <cell line: 7>()
      3 mrger_1.append("sjadad")
      5 print(mrger_1)
----> 7 mrger_1.append(1,2,3)

TypeError: list.append() takes exactly one argument (3 given)
mrger_1 = ['խնձոր', 'բանան']
mrger_2 = ['սիմիրենկո', 'գոլդեն', 'համով բանան']

mrger_1.extend(mrger_2)
print(mrger_1)
bolor_mrger = mrger_1 + mrger_2

print(mrger_1)
print(bolor_mrger)
['խնձոր', 'բանան', 'սիմիրենկո', 'գոլդեն', 'համով բանան']
['խնձոր', 'բանան', 'սիմիրենկո', 'գոլդեն', 'համով բանան']
['խնձոր', 'բանան', 'սիմիրենկո', 'գոլդեն', 'համով բանան', 'սիմիրենկո', 'գոլդեն', 'համով բանան']

ջնջել

mrger = ['սիմիրենկո', 'գոլդեն', 'համով բանան']

mrger.clear()

print(mrger)
[]

սորտավորել

# վերջապես
a = [1, 2, 23, 2, 3, 0, -3, 4, -6]

a.sort()

print(a)

# a.sort(reverse=True)
[-6, -3, 0, 1, 2, 2, 3, 4, 23]
[1, 2, 23, 2, 3, 0, -3, 4, -6]
# վերջապես
a = ['այբ', "գիմ", "բեն"] 

a.sort()

print(a)
['այբ', 'բեն', 'գիմ']

ASCII table

շրջել

a = [1,2,3]
a.reverse()
print(a)
[3, 2, 1]
print("բարև".reverse())
print("բարև"[::-1])
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Input In [59], in <cell line: 1>()
----> 1 print("բարև".reverse())
      2 print("բարև"[::-1])

AttributeError: 'str' object has no attribute 'reverse'

էլեմենտ հեռացնել

del a[0]
a = ['այբ', "գիմ", "բեն", 'այբ', 'պանիր']

a.remove('այբ')
print(a)

a.remove('պանիր')
print(a)
['գիմ', 'բեն', 'այբ', 'պանիր']
['գիմ', 'բեն', 'այբ']
jnjac = a.remove(a[0])

print(a)
print(jnjac)
['բեն', 'այբ']
None
a = ['այբ', "գիմ", "բեն", 'այբ', 'պանիր']

jnjac = a.pop()

print(a)
print(jnjac)
['այբ', 'գիմ', 'բեն', 'այբ']
պանիր

էլեմենտ տեղադրել

mrger = ['խնձոր', "տանձ", "բանան"]
mrger.append('արքայախնձոր')

print(mrger)
['խնձոր', 'տանձ', 'բանան', 'արքայախնձոր']
mrger = ['խնձոր', "տանձ", "բանան"]
mrger.insert(1, 'արքայախնձոր')
mrger.insert(123123, 'արքայախնձոր')

print(mrger)
['խնձոր', 'արքայախնձոր', 'տանձ', 'բանան', 'արքայախնձոր']

գտնել էլեմենտ

print(mrger.index('արքայախնձոր'))
print(mrger.index('թագուհիախնձոր'))
# չունենք mrger.find()
1
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [71], in <cell line: 2>()
      1 print(mrger.index('արքայախնձոր')) #
----> 2 print(mrger.index('թագուհիախնձոր'))
      3 # չունենք mrger.find()

ValueError: 'թագուհիախնձոր' is not in list
help(mrger)

Առաջադրանք

Կարգինի շրջորի խնդիր - Վիդեո լուծում - Կարգինը

text = "Բարև Ձեզ Ջրհոր"

lst = text.split()

lst.reverse()

print(lst)

reversed_text = " ".join(lst)

print(reversed_text)
['Ջրհոր', 'Ձեզ', 'Բարև']
Ջրհոր Ձեզ Բարև

Ternary (conditional) operators

(ternary որովհետև 3 բանիցա բաղկացած)

"Fear" if ternary_set=="Cantor" else None
(c) Jonathan Coulton

Unconditional Love
(c) Jah Cure

num = 7 # 1
# 'զույգ' # 2
# 'կենտ' # 3 բան ա օգտագործում

if num % 2 == 0:
    zueg_te_kent = 'զույգ'
else:
    zueg_te_kent = 'կենտ'
print(zueg_te_kent)
կենտ
zueg_te_kent = "զույգ" if num % 2 == 0 else "կենտ"
print(zueg_te_kent)
կենտ

Ընդհանուր կառուցվածքնա՝
value_if_true if condition else value_if_false

Առաջադրանք 1

չափահաս թե չչափահաս

age = 17

adult_or_not = "Չափահաս" if age >= 18 else "անչափահաս"

print(adult_or_not)

# adult_or_not = "Չափահաս" if age >= 18
  Input In [81]
    adult_or_not = "Չափահաս" if age >= 18
                   ^
SyntaxError: expected 'else' after 'if' expression

Ներդրված (nested) ternary operator

! Չարժի օգտագործել, անընթեռնելի ա

թիվը դրական ա, բացասական թե զրո

num = 509

if num > 0:
    sign = "positive"
else:
    # if num == 0:
    #     sign = "zero"
    # else:
    #     sign = "negative"
    sign = "zero" if num == 0 else "negative"
    
sign = "positive" if num > 0 else ("zero" if num == 0 else "negative")
print(sign)
# <արտահայտություն եթե պայմանը ճշմարիտա> if <պայման> else <արտահայտություն եթե սխալա>
positive

կարանք առանց փակագիծ էլ

sign = "positive" if num > 0 else ("zero" if num == 0 else "negative")
# կարանք առանց փակագիծ էլ
sign = "positive" if num > 0 else "zero" if num == 0 else "negative"

Արագագործություն

stackoverflow

%%timeit
num = 509
x = "դրական" if num > 0 else ("zero" if num == 0 else "բացասական")
282 ns ± 23.2 ns per loop (mean ± std. dev. of 7 runs, 10,000,000 loops each)
%%timeit
num = 509

if num > 0:
    x = 'դրական'
else:
    if num == 0:
        x = 'զրո'
    else:
        x = 'բացասական'
362 ns ± 89.7 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)
>>> def f():
...   return a if b else c
...
>>> dis.dis(f)
  2           0 LOAD_GLOBAL              0 (b)
              2 POP_JUMP_IF_FALSE        8
              4 LOAD_GLOBAL              1 (a)
              6 RETURN_VALUE
        >>    8 LOAD_GLOBAL              2 (c)
             10 RETURN_VALUE
>>> def g():
...   if b:
...     return a
...   else:
...     return c
...
>>> dis.dis(g)
  2           0 LOAD_GLOBAL              0 (b)
              2 POP_JUMP_IF_FALSE        8

  3           4 LOAD_GLOBAL              1 (a)
              6 RETURN_VALUE

  5     >>    8 LOAD_GLOBAL              2 (c)
             10 RETURN_VALUE
             12 LOAD_CONST               0 (None)

list comprehensions

comprehension - հասկանալու կարողություն

Սովորական

Օրինակ 1 | քառակուսի բարձրացնել էլեմենտի տարրերը

# Օրինակ 1 | քառակուսի բարձրացնել էլեմենտի տարրերը
lst = [3, 4, 1, 0, 12, 509, 88]

qarakusiner = []
for x in lst:
    qarakusiner.append(x**2)

print(qarakusiner)
[9, 16, 1, 0, 144, 259081, 7744]
qarakusiner = [x**2 for x in lst]
print(qarakusiner)
[9, 16, 1, 0, 144, 259081, 7744]

Ընդհանուր կառուցվածքը՝

[expression for item in list]

Օրինակ 2 | մեկից տաս թվերի քառակուսիներ

# Օրինակ 2 | մեկից տաս թվերի քառակուսիներ
qarakusiner_mekic_tas = []

for x in range(1,11):
    qarakusiner_mekic_tas.append(x**2)

print(qarakusiner_mekic_tas)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
qarakusiner_mekic_tas = [x**2 for x in range(1, 11)]
print(qarakusiner_mekic_tas)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Օրինակ 3 (filter) | ցուցակում զույգ թվերը պահենք մեկ այլ ցուցակի մեջ

lst = [3, 4, 1, 0, 11, 509, 88]

zueger = []
for i in lst:
    if i % 2 == 0:
        zueger.append(i)

print(zueger)
[16, 0, 7744]
zueger = [i for i in lst if i % 2 == 0]
bolor = [i for i in lst]
print(bolor)

zueger = [i for i in lst if i % 2 == 0]
print(zueger)
[3, 4, 1, 0, 11, 509, 88]
[4, 0, 88]
zueger = [i for i in lst if i % 2 == 0]
print(zueger)
[4, 0, 88]
# եթե ուզենք զույգ թվերի քանակուսիները կարանք գրենք՝
zuegeri_qarakusiner = [i**2 for i in lst if i % 2 == 0]
print(zuegeri_qarakusiner)
[16, 0, 7744]

Օրինակ 4 (list comprehensions for filtering)

# Օրինակ 4 | հեռացնել ցուցակից ռ պարունակողները
barer = ['ռոբոտ', 'ռնգեղջուր', "ռումբա", "սալսա", "միաեղջուր", "պանիր"]
barer_aranc_r = []

for i in barer:
    if not ('ռ' in i):
        barer_aranc_r.append(i)

print(barer_aranc_r)
['սալսա', 'միաեղջուր', 'պանիր']
barer_aranc_r = [i for i in barer if not ('ռ' in i)]
print(barer_aranc_r)
['սալսա', 'միաեղջուր', 'պանիր']

Արագագործություն

Նյութ (5 րոպեանոց վիդեո ա ընդամենը)

image.png

image.png
%%timeit
barer_aranc_r = []


for i in barer:
    if not 'ռ' in i:
        barer_aranc_r.append(i)
2.31 µs ± 400 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)
%%timeit
barer_aranc_r = [i for i in barer if not 'ռ' in i]
2.89 µs ± 359 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)

Առաջադրանք: ավելի մեծ քան նախորդը (profound)

lst = [10, 40, 23, 509, 4]
lav_videoner = []

for i in range(len(lst)-1):
    if lst[i+1] > lst[i]:
        lav_videoner.append(lst[i+1])
lav_videoner = [lst[i+1] for i in range(len(lst)-1) if lst[i+1] > lst[i]]
lav_videoner
[40, 509]

Առաջադրանք (2 հատ if)

1 - 100 6-ի բաժանվող թվերը, որոնք վերջանում են 2-ով

nums = []

for i in range(1, 101):
    if i % 6 == 0 and i % 10 == 2:
        nums.append(i)

print(nums)
[12, 42, 72]
nums = [i for i in range(1, 101) if i % 6 == 0 and i % 10 == 2]
print(nums)
# էլի անընթեռնելի ա, ավելի լավ ա բացված տեսքով գրել
[12, 42, 72]

Ternary operator + List comprehension

ցուցակի մեջ պահել 1-ից 5 թվերի զույգությունները (զույգ/կենտ)

lst = [1,2,3,4,5]

# ["կենտ", "զույգ", "կենտ", "զույգ", "կենտ"]
zuegutunner = ['զույգ' if i % 2 == 0 else "կենտ" for i in lst]
print(zuegutunner)
['կենտ', 'զույգ', 'կենտ', 'զույգ', 'կենտ']
lst = []
for i in lst:
    if i % 2 == 0:
        lst.append("զույգ")
    else:
        lst.append('կենտ')

print(lst)
['կենտ', 'զույգ', 'կենտ', 'զույգ', 'կենտ']
lst = []
for i in range(1, 6):
    lst.append("զույգ" if i % 2 == 0 else "կենտ")

print(lst)
['կենտ', 'զույգ', 'կենտ', 'զույգ', 'կենտ']

lst = ["զույգ" if tiv % 2 == 0 else "կենտ" for tiv in range(1, 6)]
print(lst)
['կենտ', 'զույգ', 'կենտ', 'զույգ', 'կենտ']

Nested list comprehensions (լրացուցիչ)

Ուղղակի վարժվելու համար ա, պրակտիկայում ավելի լավ ա ուղղակի բացված տեսքով գրել,

են որ կարանք լիքը բան մի տողով գրենք, հեչ չի նշանակում որ պետք ա

քառակուսիների օրինակ

a = [
    [1, 0, 3],
    [4, 5, 6]
    ]
a
[[1, 0, 3], [4, 5, 6]]
qarakusiner = []

for tox in a:
    tox_qarakusiner = []
    for j in tox:
        tox_qarakusiner.append(j**2)
    # print(tox_qarakusiner)
    qarakusiner.append(tox_qarakusiner)

qarakusiner
[[1, 0, 9], [16, 25, 36]]
tox_qarakusiner = []
for j in tox:
    tox_qarakusiner.append(j**2)

tox_qarakusiner = [j**2 for j in tox]

# սա դառնումա
tox = a[0]
tox_qarakusiner = [j**2 for j in tox]
tox_qarakusiner
[1, 0, 9]
qarakusiner = []
for tox in a:
    tox_qarakusiner = [j**2 for j in tox]
    qarakusiner.append(tox_qarakusiner)

qarakusiner
[[1, 0, 9], [16, 25, 36]]
qarakusiner = [tox_parakusiner for tox in a]
qarakusiner = [[j**2 for j in tox] for tox in a]
qarakusiner
[[1, 0, 9], [16, 25, 36]]

Մատրիցի օրինակ

# Սարքել սենց մատրից
matrix = [[0, 1, 2, 3, 4, ..., n],
          [0, 1, 2, 3, 4, ..., n],
          [0, 1, 2, 3, 4, ..., n],
          [0, 1, 2, 3, 4, ..., n],
          [0, 1, 2, 3, 4, ..., n]]

n = 5
matrix = [list(range(n+1)) for i in range(n+1)]
matrix # սենց ավելի ընթեռնելի ա տպում
[[0, 1, 2, 3, 4, 5],
 [0, 1, 2, 3, 4, 5],
 [0, 1, 2, 3, 4, 5],
 [0, 1, 2, 3, 4, 5],
 [0, 1, 2, 3, 4, 5],
 [0, 1, 2, 3, 4, 5]]
tox = []
for i in range(n+1):
    tox.append(i)
print(tox)
[0, 1, 2, 3, 4, 5]
tox = [j for j in range(n)]
tox
[0, 1, 2, 3, 4]
matrix = []
for r in range(n):
    tox = [i for i in range(n)]
    matrix.append(tox)
matrix
[[0, 1, 2, 3, 4],
 [0, 1, 2, 3, 4],
 [0, 1, 2, 3, 4],
 [0, 1, 2, 3, 4],
 [0, 1, 2, 3, 4]]
matrix = [[i for i in range(n)] for r in range(n)]
matrix
[[0, 1, 2, 3, 4],
 [0, 1, 2, 3, 4],
 [0, 1, 2, 3, 4],
 [0, 1, 2, 3, 4],
 [0, 1, 2, 3, 4]]

Ցուցակի մեջ ցուցակը տափակեցնել


nested_list = [[1, 2], [3, 4], [5, 6]]
print(nested_list)

nested_list = [1,2,3,4,5,6]
[[1, 2], [3, 4], [5, 6]]
nested_list = [[1, 2], [3, 4], [5, 6]]

tapakacrac = []

for entalist in nested_list:
    for i in entalist:
        tapakacrac.append(i)
tapakacrac
[1, 2, 3, 4, 5, 6]
# ստեղ պետքա զգույշ լինենք
tapakacrac = [i for entalist in nested_list for i in entalist]
print(tapakacrac)
[1, 2, 3, 4, 5, 6]

🏡Տնային

Հիմնական տնային

  1. Profound բաժին 19 (Տողերի և զանգվածների մեթոդներ) - լրիվ
  2. Profound բաժին 22 (List Comprehensions) - 1 - 7 (ներառյալ)

Նշումներ

  • Եթե կուզեք կարաք Ներդրված ցիկլեր (բաժին 20)ը անեք, որոշները ավելի շատ բայց հենց ծրագրավորման տեսանկյունից են հետաքրքիր, ոչ թե Python-ի
  • Կարող եք նաև ներդրված list comprehension-ների խնդիրները նայել, բայց ուղղակի որպես վարժանք նայեք դրանց, պրակտիկայում ավելի լավ ա ընդարձակ տեսքով գրեք կոդը

Լուծումներ

🛠️ Գործնական (ToDo)

🎲 5

Flag Counter