ඒ string.join(list)
වෙනුවට එය ඇයි list.join(string)
?
මෙයට හේතුව join
“නූල්” ක්රමයක් වීමයි! එය ඕනෑම නැවත සැකසිය හැකි නූලක් සාදයි. අපි ක්රමවේදය ලැයිස්තු වල සිර කර ඇත්නම්, අපට ලැයිස්තු නොමැති පුනරාවර්තන ඇති විට කුමක් වේද?
ඔබට නූල් පටියක් තිබේ නම් කුමක් කළ යුතුද? මෙය list
ක්රමවේදයක් නම්, list
මූලද්රව්යයන් එක නූලකට සම්බන්ධ කිරීමට පෙර ඔබට එවැනි සෑම නූල් අනුකාරකයක්ම වාත්තු කිරීමට සිදුවේ ! උදාහරණයක් වශයෙන්:
some_strings = ('foo', 'bar', 'baz')
අපි අපේම ලැයිස්තු සම්බන්ධ කිරීමේ ක්රමය රෝල් කරමු:
class OurList(list):
def join(self, s):
return s.join(self)
එය භාවිතා කිරීම සඳහා, මතකයට හා සැකසුම් බලය යන දෙකම නාස්ති කරමින්, එම ක්රියාකාරීත්වයේ ඇති නූල් වලට සම්බන්ධ වීමට අප මුලින්ම එක් එක් ක්රියාකාරීත්වයෙන් ලැයිස්තුවක් නිර්මාණය කළ යුතු බව සලකන්න.
>>> l = OurList(some_strings) # step 1, create our list
>>> l.join(', ') # step 2, use our list join method!
'foo, bar, baz'
එබැවින් අපගේ ලැයිස්තු ක්රමය භාවිතා කිරීම සඳහා අතිරේක පියවරක් එකතු කළ යුතු බව අපට පෙනේ, හුදෙක් බිල්ඩින් නූල් ක්රමය භාවිතා කිරීම වෙනුවට:
>>> ' | '.join(some_strings) # a single step!
'foo | bar | baz'
උත්පාදක යන්ත්ර සඳහා කාර්ය සාධන කේවට්
අවසාන str.join
නූල නිර්මාණය කිරීම සඳහා පයිතන් ඇල්ගොරිතම සත්ය වශයෙන්ම දෙවරක් පසු කළ යුතුය, එබැවින් ඔබ එය උත්පාදක ප්රකාශනයක් ලබා දෙන්නේ නම්, එය අවසාන නූල සෑදීමට පෙර එය ලැයිස්තුවක් තුළට ගෙන යා යුතුය.
මේ අනුව, ජනක යන්ත්ර වටා ගමන් කිරීම සාමාන්යයෙන් ලැයිස්තු අවබෝධයට වඩා හොඳය, str.join
ව්යතිරේකයකි:
>>> import timeit
>>> min(timeit.repeat(lambda: ''.join(str(i) for i in range(10) if i)))
3.839168446022086
>>> min(timeit.repeat(lambda: ''.join([str(i) for i in range(10) if i])))
3.339879313018173
එසේ වුවද, str.join
මෙහෙයුම තවමත් අර්ථාන්විතව “නූල්” මෙහෙයුමක් වන අතර, එය තවමත් str
විවිධ ක්රියාකාරීත්වයන්ට වඩා වස්තුව මත තබා ගැනීම අර්ථවත් කරයි .
-
ඔබ ලැයිස්තුවකට සම්බන්ධ වී නූලකට පරිවර්තනය වන බව ප්රකාශ කරයි. එහි ප්රති result ලය නැඹුරු වේ.