ស្រាយកញ្ចប់ (ពង្រីក និងកំណត់ទៅអថេរច្រើន) tuples និងបញ្ជីនៅក្នុង Python

អាជីវកម្ម

នៅក្នុង Python ធាតុនៃ tuple ឬបញ្ជីអាចត្រូវបានពង្រីក និងកំណត់ទៅអថេរច្រើន។ នេះហៅថា កិច្ចការពន្លាកញ្ចប់ ឬ កិច្ចការមិនខ្ចប់។

ព័ត៌មានលម្អិតខាងក្រោមត្រូវបានពិពណ៌នានៅទីនេះ។

  • ការវេចខ្ចប់មូលដ្ឋាននៃ tuples និងបញ្ជី
  • tuples សំបុក, បញ្ជីដែលមិនបានវេចខ្ចប់
  • ការវេចខ្ចប់ជាមួយនឹងសញ្ញាគូសបញ្ជាក់:_
  • ការវេចខ្ចប់ជាមួយសញ្ញាផ្កាយ:*

សូមមើលអត្ថបទខាងក្រោមសម្រាប់ព័ត៌មានស្តីពីការប្រើប្រាស់សញ្ញាផ្កាយដើម្បីពង្រីក និងឆ្លងកាត់ tuples បញ្ជី និងវចនានុក្រមជាអាគុយម៉ង់មុខងារ។

ការវេចខ្ចប់មូលដ្ឋាននៃ tuples និងបញ្ជី

នៅពេលដែលអថេរត្រូវបានសរសេរនៅផ្នែកខាងឆ្វេង បំបែកដោយក្បៀស អថេរនីមួយៗត្រូវបានផ្តល់ធាតុនៃ tuple ឬបញ្ជីនៅខាងស្តាំដៃ។ វាដូចគ្នាសម្រាប់ទាំង tuples និងបញ្ជី (ឧទាហរណ៍ខាងក្រោមត្រូវបានសរសេរក្នុងទម្រង់ tuple) ។

t = (0, 1, 2)

a, b, c = t

print(a)
print(b)
print(c)
# 0
# 1
# 2

l = [0, 1, 2]

a, b, c = l

print(a)
print(b)
print(c)
# 0
# 1
# 2

សូមចំណាំថា ដោយសារ tuples អាចលុបតង្កៀបមូល វាអាចត្រូវបានប្រើដើម្បីផ្តល់តម្លៃច្រើនទៅអថេរច្រើននៅលើបន្ទាត់តែមួយដូចខាងក្រោម។

a, b = 0, 1

print(a)
print(b)
# 0
# 1

ប្រសិនបើចំនួននៃអថេរមិនត្រូវគ្នានឹងចំនួនធាតុ នោះមានកំហុសកើតឡើង។

# a, b = t
# ValueError: too many values to unpack (expected 2)

# a, b, c, d = t
# ValueError: not enough values to unpack (expected 4, got 3)

ប្រសិនបើចំនួនអថេរតិចជាងចំនួនធាតុ ធាតុដែលនៅសល់អាចត្រូវបានកំណត់ជាបញ្ជីដោយបន្ថែមសញ្ញាផ្កាយទៅឈ្មោះអថេរ (សូមមើលខាងក្រោម)។

tuples សំបុក, បញ្ជីដែលមិនបានវេចខ្ចប់

tuples និងបញ្ជីដែលលាក់ទុកក៏អាចត្រូវបានពន្លាផងដែរ។ ប្រសិនបើ​អ្នក​ចង់​ស្រាយ​មាតិកា​ផងដែរ សូម​ភ្ជាប់​អថេរ​ក្នុង​មួយ​ខាងក្រោម

  • ()
  • []
t = (0, 1, (2, 3, 4))

a, b, c = t

print(a)
print(b)
print(c)
# 0
# 1
# (2, 3, 4)

print(type(c))
# <class 'tuple'>

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

print(a)
print(b)
print(c)
print(d)
print(e)
# 0
# 1
# 2
# 3
# 4

ខ្ចប់ដោយ _underscore_ ។

នៅក្នុង Python មិនត្រឹមតែមិនខ្ចប់ទេ តម្លៃដែលមិនត្រូវការត្រូវបានចាត់តាមធម្មតាទៅ underscore (underscore) _. មិនមានអត្ថន័យវេយ្យាករណ៍ពិសេស; ពួកវាត្រូវបានកំណត់យ៉ាងសាមញ្ញទៅអថេរដែលមានឈ្មោះ _.

t = (0, 1, 2)

a, b, _ = t

print(a)
print(b)
print(_)
# 0
# 1
# 2

ការវេចខ្ចប់ជាមួយសញ្ញាផ្កាយ

ប្រសិនបើចំនួនអថេរតិចជាងចំនួនធាតុ សញ្ញាផ្កាយនៅក្នុងឈ្មោះអថេរនឹងធ្វើឱ្យធាតុត្រូវបានចាត់តាំងរួមគ្នាជាបញ្ជី។

វាក្យសម្ព័ន្ធនេះត្រូវបានអនុវត្តតាំងពី Python 3 ហើយមិនមាននៅក្នុង Python 2 ទេ។

ធាតុ​ត្រូវ​បាន​កំណត់​ពី​ដើម​ និង​ចុង​ទៅ​អថេរ​ដែល​គ្មាន​សញ្ញា​ផ្កាយ​ ហើយ​ធាតុ​ដែល​នៅ​សល់​ត្រូវ​បាន​កំណត់​ជា​បញ្ជី​ទៅ​អថេរ​ដែល​មាន​សញ្ញា​ផ្កាយ។

t = (0, 1, 2, 3, 4)

a, b, *c = t

print(a)
print(b)
print(c)
# 0
# 1
# [2, 3, 4]

print(type(c))
# <class 'list'>

a, *b, c = t

print(a)
print(b)
print(c)
# 0
# [1, 2, 3]
# 4

*a, b, c = t

print(a)
print(b)
print(c)
# [0, 1, 2]
# 3
# 4

ឧទាហរណ៍ ប្រសិនបើអ្នកចង់កំណត់តែធាតុពីរដំបូងនៃ tuple ឬបញ្ជីទៅអថេរ អ្នកអាចប្រើសញ្ញាគូសខាងលើសម្រាប់ផ្នែកដែលមិនត្រូវការ។

a, b, *_ = t

print(a)
print(b)
print(_)
# 0
# 1
# [2, 3, 4]

ដូចគ្នានេះដែរអាចត្រូវបានសរសេរដូចខាងក្រោម

a, b = t[0], t[1]

print(a)
print(b)
# 0
# 1

មានតែសញ្ញាផ្កាយមួយប៉ុណ្ណោះដែលអាចភ្ជាប់បាន។ ប្រសិនបើមានអថេរច្រើនដែលត្រូវបានសម្គាល់ដោយសញ្ញាផ្កាយ កំហុស SyntaxError នឹងកើតឡើង ព្រោះវាមិនអាចកំណត់ថាតើធាតុប៉ុន្មានត្រូវបានផ្តល់ទៅឱ្យអថេរនីមួយៗ។

# *a, b, *c = t
# SyntaxError: two starred expressions in assignment

ចំណាំថាសូម្បីតែធាតុតែមួយដែលបានកំណត់ទៅអថេរដែលសម្គាល់ដោយសញ្ញាផ្កាយក៏ត្រូវបានកំណត់ជាបញ្ជី។

t = (0, 1, 2)

a, b, *c = t

print(a)
print(b)
print(c)
# 0
# 1
# [2]

print(type(c))
# <class 'list'>

ប្រសិនបើមិនមានធាតុបន្ថែមទេ បញ្ជីទទេត្រូវបានចាត់តាំង។

a, b, c, *d = t

print(a)
print(b)
print(c)
print(d)
# 0
# 1
# 2
# []
Copied title and URL