ការកំណត់ថាតើបញ្ជី (អារេ) មានធាតុស្ទួននៅក្នុង Python

អាជីវកម្ម

ខាង​ក្រោម​នេះ​គឺ​ជា​ការ​ពិពណ៌នា​អំពី​របៀប​កំណត់​ថា​តើ​បញ្ជី (អារេ) មាន​ធាតុ​ស្ទួន (ធាតុ​ទាំង​អស់​មាន​តែ​មួយ/ប្លែក) ក្នុង Python សម្រាប់​ករណី​ដូច​ខាង​ក្រោម​នីមួយៗ។

  • សម្រាប់បញ្ជីដែលគ្មានបញ្ជីនៅក្នុងធាតុ
  • សម្រាប់បញ្ជីដែលមានបញ្ជីធាតុ (អារេពីរវិមាត្រ បញ្ជីបញ្ជី ។ល។)

សូមមើលអត្ថបទខាងក្រោមអំពីរបៀបលុប ឬស្រង់ធាតុស្ទួនចេញពីបញ្ជី។

ចំណាំថាបញ្ជីអាចរក្សាទុកប្រភេទទិន្នន័យផ្សេងៗគ្នា ហើយខុសគ្នាយ៉ាងតឹងរ៉ឹងពីអារេ។ ប្រសិនបើអ្នកចង់គ្រប់គ្រងអារេនៅក្នុងដំណើរការដែលទាមទារទំហំអង្គចងចាំ និងអាសយដ្ឋានអង្គចងចាំ ឬដំណើរការជាលេខនៃទិន្នន័យធំ សូមប្រើអារេ (បណ្ណាល័យស្តង់ដារ) ឬ NumPy ។

កំណត់ថាតើមានធាតុស្ទួននៅក្នុងបញ្ជី (ប្រសិនបើធាតុមិនមានបញ្ជី)

ប្រសិនបើធាតុមិនមានវត្ថុដែលអាចអាប់ដេតបានដូចជាបញ្ជីទេ សូមប្រើ constructor set() នៃប្រភេទ set set។

ប្រភេទសំណុំគឺជាប្រភេទទិន្នន័យដែលមិនមានធាតុស្ទួន។ នៅពេលដែលបញ្ជីត្រូវបានបញ្ជូនទៅ constructor set() តម្លៃស្ទួនត្រូវបានមិនអើពើ ហើយវត្ថុនៃប្រភេទដែលបានកំណត់ជាមួយនឹងតម្លៃតែមួយគត់ដែលជាធាតុត្រូវបានបញ្ជូនត្រឡប់មកវិញ។

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

  • ប្រសិនបើចំនួនធាតុស្មើគ្នានោះ មិនមានធាតុស្ទួននៅក្នុងបញ្ជីដើមទេ។
  • ធាតុស្ទួនត្រូវបានបញ្ចូលក្នុងបញ្ជីដើម ប្រសិនបើចំនួនធាតុខុសគ្នា

អនុគមន៍ដែលត្រឡប់មិនពិត ប្រសិនបើមិនមានធាតុស្ទួន និងពិតប្រសិនបើមានធាតុស្ទួនមានដូចខាងក្រោម

def has_duplicates(seq):
    return len(seq) != len(set(seq))

l = [0, 1, 2]
print(has_duplicates(l))
# False

l = [0, 1, 1, 2]
print(has_duplicates(l))
# True

ឧទាហរណ៍គឺជាបញ្ជីមួយ ប៉ុន្តែមុខងារដូចគ្នាអាចត្រូវបានប្រើជាមួយ tuples ។

វត្ថុដែលអាចផ្លាស់ប្តូរបាន (អាចធ្វើបច្ចុប្បន្នភាព) ដូចជាបញ្ជីមិនអាចជាធាតុនៃប្រភេទដែលបានកំណត់ទេ។ ដូច្នេះបញ្ជីដែលមានបញ្ជីជាធាតុ (អារេពីរវិមាត្របញ្ជីបញ្ជី។ ល។ ) នឹងបណ្តាលឱ្យមានកំហុស Type ។ វិធានការប្រឆាំងត្រូវបានបង្ហាញខាងក្រោម។

l_2d = [[0, 1], [1, 1], [0, 1], [1, 0]]
# print(has_duplicates(l_2d))
# TypeError: unhashable type: 'list'

កំណត់ថាតើមានធាតុស្ទួននៅក្នុងបញ្ជី (ប្រសិនបើធាតុមានបញ្ជី)

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

def has_duplicates2(seq):
    seen = []
    unique_list = [x for x in seq if x not in seen and not seen.append(x)]
    return len(seq) != len(unique_list)

l_2d = [[0, 0], [0, 1], [1, 1], [1, 0]]
print(has_duplicates2(l_2d))
# False

l_2d = [[0, 0], [0, 1], [1, 1], [1, 1]]
print(has_duplicates2(l_2d))
# True

ជំនួសឱ្យ set() កំណត់ចំណាំក្នុងបញ្ជីបង្កើតបញ្ជីដែលធាតុមានត្រឹមតែតម្លៃតែមួយគត់ ហើយចំនួនធាតុត្រូវបានប្រៀបធៀប។ សូមមើលអត្ថបទខាងក្រោមសម្រាប់ព័ត៌មានលម្អិត។

មុខងារនេះក៏មានសុពលភាពសម្រាប់បញ្ជីដែលមិនមានបញ្ជីធាតុ។

l = [0, 1, 2]
print(has_duplicates2(l))
# False

l = [0, 1, 1, 2]
print(has_duplicates2(l))
# True

ឧទាហរណ៍រហូតមកដល់ពេលនេះគឺជាការកំណត់ថាតើបញ្ជីធាតុត្រូវបានចម្លង (មានបញ្ជីដូចគ្នា) ។

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

l_2d = [[0, 1], [2, 3]]
print(sum(l_2d, []))
# [0, 1, 2, 3]

print(has_duplicates(sum(l_2d, [])))
# False

l_2d = [[0, 1], [2, 0]]
print(has_duplicates(sum(l_2d, [])))
# True

នៅទីនេះ sum() ត្រូវបានប្រើដើម្បីបង្រួមបញ្ជី ប៉ុន្តែ itertools.chain.from_iterable() ក៏អាចត្រូវបានប្រើផងដែរ។ លើសពីនេះទៀតនៅពេលបង្រួមបញ្ជីនៃវិមាត្របីឬច្រើនវាចាំបាច់ត្រូវកំណត់មុខងារថ្មី។

Copied title and URL