অজগর মধ্যে সবচেয়ে দক্ষ স্ট্রিং সংক্ষিপ্তকরণ পদ্ধতি কি?


148

সেখানে (যেমন পাইথন যে কোন দক্ষ ভর স্ট্রিং সংযুক্তকরণের পদ্ধতি StringBuilder সি # বা StringBuffer জাভা)? আমি পদ্ধতি নিম্নলিখিত পাওয়া এখানে :

  • ব্যবহার করে সাধারণ কনট্যাকটেশন +
  • স্ট্রিং তালিকা এবং joinপদ্ধতি ব্যবহার করে
  • মডিউল UserStringথেকে ব্যবহার করা হচ্ছেMutableString
  • অক্ষর অ্যারে এবং arrayমডিউল ব্যবহার করে
  • মডিউল cStringIOথেকে ব্যবহার করা হচ্ছেStringIO

তবে বিশেষজ্ঞরা কী ব্যবহার করেন বা পরামর্শ দেন এবং কেন?

[ এখানে একটি সম্পর্কিত প্রশ্ন ]



একটিকে জ্ঞাত টুকরো টুকরো করার জন্য পাইথন ৩.on-এ f''ফর্ম্যাট স্ট্রিং রয়েছে যা পূর্ববর্তী পাইথন সংস্করণগুলির যে কোনও বিকল্পের চেয়ে দ্রুততর হবে be
এন্টি হাপাল

উত্তর:


127

আপনি এতে আগ্রহী হতে পারেন: গুডোর একটি অপ্টিমাইজেশন উপাখ্যান । যদিও এটি মনে রাখা দরকার যে এটি একটি পুরাতন নিবন্ধ এবং এটি যেমন অস্তিত্বের পূর্বাভাস দেয় ''.join(যদিও আমার ধারণা string.joinfieldsকম-বেশি বা একই রকম)

এর শক্তির ভিত্তিতে, আপনি যদি নিজের সমস্যাটি জুড়ে দিতে পারেন তবে arrayমডিউলটি সবচেয়ে দ্রুত হতে পারে। তবে ''.joinসম্ভবত এটি যথেষ্ট দ্রুত এবং এর সাথে অহংকারী হওয়ার সুবিধা রয়েছে এবং এইভাবে অন্যান্য অজগর প্রোগ্রামারদের এটি বোঝা সহজ।

অবশেষে, অপ্টিমাইজেশনের সুবর্ণ নিয়ম: অনুমান না করে আপনার প্রয়োজন, এবং পরিমাপ না করা না হলে অপ্টিমাইজ করবেন না।

আপনি timeitমডিউলটি ব্যবহার করে বিভিন্ন পদ্ধতি পরিমাপ করতে পারেন । এটি আপনাকে বলতে পারে যে ইন্টারনেটটিতে অনুমান করা এলোমেলো অপরিচিতদের পরিবর্তে কোনটি দ্রুত।


1
কখন কখন অনুকূল করা যায় সে সম্পর্কে বিন্দুতে যুক্ত হওয়া: খারাপ অবস্থার বিরুদ্ধে পরীক্ষা করা নিশ্চিত করুন। উদাহরণস্বরূপ, আমি আমার নমুনাটি বাড়িয়ে তুলতে পারি যাতে আমার বর্তমান কোডটি 0.17 সেকেন্ডে চলমান থেকে 170 সেকেন্ডে যায়। ভাল আমি আরও বড় নমুনা মাপে পরীক্ষা করতে চাই যেহেতু সেখানে কম পার্থক্য রয়েছে।
ফ্লিপার

2
"আপনার প্রয়োজনের আগ পর্যন্ত অপ্টিমাইজ করবেন না।" আপনি যদি কেবলমাত্র নামমাত্র আলাদা আইডিয়ম ব্যবহার না করেন এবং অল্প অতিরিক্ত পরিশ্রমের সাথে আপনার কোডটির পুনরায় কাজ এড়াতে পারবেন না।
jeremyjjbrown

1
আপনার জানা দরকার এমন একটি জায়গা হ'ল সাক্ষাত্কার (যা আপনার গভীর বোঝাপড়াটি ব্রাশ করার জন্য সর্বদা একটি দুর্দান্ত সময়)। দুর্ভাগ্যক্রমে আমি এ সম্পর্কে কোনও আধুনিক নিবন্ধ খুঁজে পাইনি। (1) জাভা / সি # স্ট্রিং কি 2017 এ এখনও খারাপ? (২) সি ++ কেমন? (3) এখন পাইথনের সর্বশেষতম এবং সর্বশ্রেষ্ঠ সম্পর্কে বলুন যখন আমাদের লক্ষ লক্ষ কনটেক্সেশন করা দরকার cases আমরা কি বিশ্বাস করতে পারি যে যোগদানের ক্ষেত্রে লিনিয়ার সময় কাজ করবে?
ব্যবহারকারী 1854182

"দ্রুত যথেষ্ট" এর অর্থ কী .join()? মূল প্রশ্নটি হ'ল এটি কি ক) সংমিশ্রনের জন্য স্ট্রিংয়ের অনুলিপি তৈরি করে (অনুরূপ s = s + 'abc'), যার জন্য ও (এন) রানটাইম প্রয়োজন হয়, বা খ) অনুলিপি তৈরি না করে কেবল বিদ্যমান স্ট্রিংয়ের সাথে সংযুক্ত করা যায়, যার জন্য ও (1) প্রয়োজন ?
সিজিএফএক্স

64

''.join(sequenceofstrings) যা সাধারণত সবচেয়ে ভাল কাজ করে - সবচেয়ে সহজ এবং দ্রুত।


3
@ এমএসএসয়েম, পাইথনে একটি সিক্যুয়েন্স কোনও অঙ্কের পরিমাণ এমনকি একটি ফাংশনও হতে পারে।
নিক ডানডৌলাকিস

2
আমি ''.join(sequence)আইডিয়োমকে একদম পছন্দ করি । এটি কমা-বিচ্ছিন্ন তালিকা উত্পাদন করতে বিশেষভাবে কার্যকর: ', '.join([1, 2, 3])স্ট্রিং দেয় '1, 2, 3'
অ্যান্ড্রু কিটন

7
@mshsayem: "".join(chr(x) for x in xrange(65,91))--- এক্ষেত্রে যোগদানের যুক্তিটি একটি পুনরুক্তিকারী, একটি জেনারেটর এক্সপ্রেশন দিয়ে তৈরি হয়েছিল। এমন কোনও অস্থায়ী তালিকা তৈরি করা হয়নি।
বালফা

2
@ বালফা: এবং তবুও জেনারেটর সংস্করণটি তালিকাটি বোঝার সংস্করণটির চেয়ে ধীরে ধীরে: সি: \ টেম্পল> পাইথন -মাইমেট "" "x 3: লুপ সি প্রতি 9,71 usec: \ টেম্প> পাইথন -mtimeit " '' .join ([chr, (x) এর জন্য x- মধ্যে xrange (65,91)])" 100000 লুপ, 3 শ্রেষ্ঠ: লুপ প্রতি 7.1 usec
hughdbrown

1
@ হুগড্রাউন, হ্যাঁ, যখন আপনার ওয়াজুর ফ্রি মেমোরি থাকে (সাধারণত টাইমিট কেস) লিস্টকম্পটি প্রায়শই ২০-৩০% জেনে এক্সপোর চেয়ে আরও ভাল করা যায়। যখন মেমরির টাইট জিনিসগুলি পৃথক হয় - ঠিক সময়ে সময়ে পুনরুত্পাদন করা শক্ত! -)
অ্যালেক্স মার্টেলি

58

পাইথন ৩.6 লিটারাল স্ট্রিং ইন্টারপোলেশন সহ পরিচিত উপাদানগুলির স্ট্রিং কনটেনটেশনের জন্য গেমটি পরিবর্তন করেছে ।

স্ট্রিং থাকা, মকোয়েস্টিনেনের উত্তর থেকে পরীক্ষার কেস দেওয়া

domain = 'some_really_long_example.com'
lang = 'en'
path = 'some/really/long/path/'

প্রার্থীরা হলেন

  • f'http://{domain}/{lang}/{path}'- 0.151। এস

  • 'http://%s/%s/%s' % (domain, lang, path) - 0.321 µ এস

  • 'http://' + domain + '/' + lang + '/' + path - 0.356। এস

  • ''.join(('http://', domain, '/', lang, '/', path))- 0.249 (গুলি (লক্ষ্য করুন যে একটি ধ্রুবক দৈর্ঘ্যের তালিকার তৈরি স্থির দৈর্ঘ্যের তালিকার তুলনায় কিছুটা দ্রুত হয়)।

সুতরাং বর্তমানে সংক্ষিপ্ততম এবং সর্বাধিক সুন্দর কোডটিও দ্রুততম।

পাইথনের ৩.6 এর আলফা সংস্করণে f''স্ট্রিংগুলির প্রয়োগটি সবচেয়ে ধীরতম সম্ভব ছিল - আসলে জেনারেটেড বাইট কোডটি ''.join()অপ্রয়োজনীয় কলগুলির ক্ষেত্রে মামলার তুলনায় বেশ সমান, যার সাথে str.__format__যুক্তি ছাড়াই কেবল selfঅপরিবর্তিত ফিরে আসবে । এই অদক্ষতাগুলি 3.6 ফাইনালের আগে সম্বোধন করা হয়েছিল।

পাইথন 2 এর দ্রুততম পদ্ধতির সাথে গতিটি বিপরীতে দেখা যায়, যা +আমার কম্পিউটারে সংক্ষিপ্তকরণ; এবং যে সময় লাগে 0.203 8-বিট স্ট্রিং সঙ্গে μs এবং 0,259 μs যদি স্ট্রিং সব ইউনিকোড হয়।


38

এটি আপনি কী করছেন তার উপর নির্ভর করে।

পাইথন 2.5 এর পরে, + অপারেটরের সাথে স্ট্রিং সংমিশ্রণটি বেশ দ্রুত। আপনি যদি কেবল কয়েকটি মানকে সম্মতি দিয়ে থাকেন তবে + অপারেটরটি সর্বোত্তমভাবে কাজ করে:

>>> x = timeit.Timer(stmt="'a' + 'b'")
>>> x.timeit()
0.039999961853027344

>>> x = timeit.Timer(stmt="''.join(['a', 'b'])")
>>> x.timeit()
0.76200008392333984

তবে, আপনি যদি একটি লুপের সাথে একটি স্ট্রিং একসাথে রাখছেন তবে তালিকাটিতে যোগদানের পদ্ধতিটি ব্যবহার করা আপনি ভাল:

>>> join_stmt = """
... joined_str = ''
... for i in xrange(100000):
...   joined_str += str(i)
... """
>>> x = timeit.Timer(join_stmt)
>>> x.timeit(100)
13.278000116348267

>>> list_stmt = """
... str_list = []
... for i in xrange(100000):
...   str_list.append(str(i))
... ''.join(str_list)
... """
>>> x = timeit.Timer(list_stmt)
>>> x.timeit(100)
12.401000022888184

... তবে লক্ষ্য করুন যে পার্থক্যটি লক্ষণীয় হয়ে ওঠার আগে আপনাকে তুলনামূলকভাবে বেশি সংখ্যক স্ট্রিং একসাথে রাখতে হবে।


2
1) আপনার প্রথম পরিমাপে এটি সম্ভবত তালিকা নির্মাণের সময় লাগে। একটি টিপল দিয়ে চেষ্টা করুন। 2) সিপথন অভিন্নভাবে দুর্দান্ত পারফর্ম করে, তবে অন্যান্য পাইথন বাস্তবায়ন + এবং + =
u0b34a0f6ae

22

প্রতি জন Fouhy এর উত্তর হিসেবে অপ্টিমাইজ যদি না আপনি না থাকে, কিন্তু যদি আপনি এখানে এসেছি এবং এই প্রশ্ন জিজ্ঞাসা, এটা অবিকল হতে পারে কারণ আপনার আছে । আমার ক্ষেত্রে, স্ট্রিং ভেরিয়েবলগুলি থেকে আমার কয়েকটি URL একত্রিত করা দরকার ... দ্রুত। আমি লক্ষ্য করেছি যে কেউ (এখনও অবধি) স্ট্রিং ফর্ম্যাট পদ্ধতিটি বিবেচনা করছে বলে মনে হচ্ছে না, তাই আমি ভেবেছিলাম যে আমি এটি চেষ্টা করব এবং বেশিরভাগ মৃদু স্বার্থের জন্য, আমি ভেবেছিলাম যে ভাল মাপকের জন্য সেখানে স্ট্রিং ইন্টারপোলেশন অপারেটরটি টস করব। সত্যি কথা বলতে, আমি ভাবিনি যে এগুলির কোনওটি সরাসরি '+' অপারেশন বা '' .জয়াইন () পর্যন্ত সজ্জিত হবে। কিন্তু অনুমান করতে পার কি? আমার পাইথন ২.7.৫ সিস্টেমে স্ট্রিং ইন্টারপোলেশন অপারেটর তাদের সকলকে নিয়ম করে এবং স্ট্রিং.ফোর্ম্যাট () সবচেয়ে খারাপ পারফর্মার:

# concatenate_test.py

from __future__ import print_function
import timeit

domain = 'some_really_long_example.com'
lang = 'en'
path = 'some/really/long/path/'
iterations = 1000000

def meth_plus():
    '''Using + operator'''
    return 'http://' + domain + '/' + lang + '/' + path

def meth_join():
    '''Using ''.join()'''
    return ''.join(['http://', domain, '/', lang, '/', path])

def meth_form():
    '''Using string.format'''
    return 'http://{0}/{1}/{2}'.format(domain, lang, path)

def meth_intp():
    '''Using string interpolation'''
    return 'http://%s/%s/%s' % (domain, lang, path)

plus = timeit.Timer(stmt="meth_plus()", setup="from __main__ import meth_plus")
join = timeit.Timer(stmt="meth_join()", setup="from __main__ import meth_join")
form = timeit.Timer(stmt="meth_form()", setup="from __main__ import meth_form")
intp = timeit.Timer(stmt="meth_intp()", setup="from __main__ import meth_intp")

plus.val = plus.timeit(iterations)
join.val = join.timeit(iterations)
form.val = form.timeit(iterations)
intp.val = intp.timeit(iterations)

min_val = min([plus.val, join.val, form.val, intp.val])

print('plus %0.12f (%0.2f%% as fast)' % (plus.val, (100 * min_val / plus.val), ))
print('join %0.12f (%0.2f%% as fast)' % (join.val, (100 * min_val / join.val), ))
print('form %0.12f (%0.2f%% as fast)' % (form.val, (100 * min_val / form.val), ))
print('intp %0.12f (%0.2f%% as fast)' % (intp.val, (100 * min_val / intp.val), ))

ফলাফলগুলো:

# python2.7 concatenate_test.py
plus 0.360787868500 (90.81% as fast)
join 0.452811956406 (72.36% as fast)
form 0.502608060837 (65.19% as fast)
intp 0.327636957169 (100.00% as fast)

যদি আমি একটি আরও ছোট ডোমেন এবং আরও ছোট পথ ব্যবহার করি, তবে ইন্টারপোলেশনটি এখনও জিততে পারে। পার্থক্যটি আরও স্পষ্ট হয় যদিও দীর্ঘতর স্ট্রিং সহ।

এখন যেহেতু আমার কাছে একটি দুর্দান্ত স্ক্রিপ্ট রয়েছে, আমি পাইথন ২.6, ৩.৩ এবং ৩.৪ এর অধীনেও পরীক্ষা করেছিলাম, ফলাফল এখানে the পাইথন ২.6-তে, প্লাস অপারেটরটি সবচেয়ে দ্রুত! পাইথন 3-এ জয়ী হয়ে জয়েন করুন। দ্রষ্টব্য: এই পরীক্ষাগুলি আমার সিস্টেমে খুব পুনরাবৃত্তিযোগ্য। সুতরাং, 'প্লাস' সর্বদা ২.6-তে দ্রুত, 'ইন্টিপি' সর্বদা ২.7-তে দ্রুত এবং 'যোগ' পাইথন ৩.x-তে সর্বদা দ্রুত থাকে So

# python2.6 concatenate_test.py
plus 0.338213920593 (100.00% as fast)
join 0.427221059799 (79.17% as fast)
form 0.515371084213 (65.63% as fast)
intp 0.378169059753 (89.43% as fast)

# python3.3 concatenate_test.py
plus 0.409130576998 (89.20% as fast)
join 0.364938726001 (100.00% as fast)
form 0.621366866995 (58.73% as fast)
intp 0.419064424001 (87.08% as fast)

# python3.4 concatenate_test.py
plus 0.481188605998 (85.14% as fast)
join 0.409673971997 (100.00% as fast)
form 0.652010936996 (62.83% as fast)
intp 0.460400978001 (88.98% as fast)

# python3.5 concatenate_test.py
plus 0.417167026084 (93.47% as fast)
join 0.389929617057 (100.00% as fast)
form 0.595661019906 (65.46% as fast)
intp 0.404455224983 (96.41% as fast)

পাঠ শিখেছে:

  • কখনও কখনও, আমার অনুমানগুলি ভুল হয়ে গেছে।
  • সিস্টেমের বিরুদ্ধে পরীক্ষা আপনি উত্পাদন চলমান হবে।
  • স্ট্রিং ইন্টারপোলেশন এখনও মারা যায় নি!

TL; ড:

  • আপনি যদি ২.6 ব্যবহার করেন তবে + অপারেটরটি ব্যবহার করুন।
  • আপনি যদি 2.7 ব্যবহার করেন তবে '%' অপারেটর ব্যবহার করুন।
  • আপনি যদি 3.x ব্যবহার করেন তবে '' .জাইন () ব্যবহার করুন।

2
দ্রষ্টব্য: আক্ষরিক স্ট্রিং অন্তরঙ্গ দ্রুত 3.6+ এর জন্য এখনও দ্রুত:f'http://{domain}/{lang}/{path}'
টেম্পোরাল

1
এছাড়াও, .format()তিনটি ফরম, দ্রুত থেকে ধীর করার জন্য রয়েছে "{}".format(x), "{0}".format(x),"{x}".format(x=x)
TemporalWolf

আসল পাঠ: যখন আপনার সমস্যার ডোমেনটি ছোট হয়, যেমন শর্ট স্ট্রিংগুলি রচনা করেন তখন পদ্ধতিটি প্রায়শই গুরুত্বপূর্ণ নয়। এমনকি এটি গুরুত্বপূর্ণ হলেও, যেমন আপনি সত্যিই একটি মিলিয়ন স্ট্রিং তৈরি করছেন, ওভারহেডটি প্রায়শই বেশি গুরুত্বপূর্ণ matters এটি ভুল সমস্যা নিয়ে চিন্তিত হওয়ার একটি সাধারণ লক্ষণ। কেবলমাত্র যখন ওভারহেডটি তাত্পর্যপূর্ণ না হয়, উদাহরণস্বরূপ যখন স্ট্রিং হিসাবে পুরো বইটি তৈরি করা হয় তখন পদ্ধতির পার্থক্যটি বিষয়টি বিবেচনা করে।
হুই

7

এটি প্রায় প্রতিটি নতুন যুক্তির পরে নতুন স্ট্রিংয়ের আপেক্ষিক আকারের উপর নির্ভর করে। সঙ্গে +অপারেটর, যে সংযুক্তকরণের জন্য একটি নতুন স্ট্রিং তৈরি করা হয়। যদি মধ্যস্থতার স্ট্রিংগুলি তুলনামূলকভাবে দীর্ঘ +হয় তবে ক্রমবর্ধমান ধীর হয়ে যায় কারণ নতুন মধ্যস্থতার স্ট্রিংটি সংরক্ষণ করা হচ্ছে।

এই ক্ষেত্রে বিবেচনা করুন:

from time import time
stri=''
a='aagsdfghfhdyjddtyjdhmfghmfgsdgsdfgsdfsdfsdfsdfsdfsdfddsksarigqeirnvgsdfsdgfsdfgfg'
l=[]
#case 1
t=time()
for i in range(1000):
    stri=stri+a+repr(i)
print time()-t

#case 2
t=time()
for i in xrange(1000):
    l.append(a+repr(i))
z=''.join(l)
print time()-t

#case 3
t=time()
for i in range(1000):
    stri=stri+repr(i)
print time()-t

#case 4
t=time()
for i in xrange(1000):
    l.append(repr(i))
z=''.join(l)
print time()-t

ফলাফল

1 0.00493192672729

2 0.000509023666382

3 0.00042200088501

4 0.000482797622681

1 এবং 2 এর ক্ষেত্রে আমরা একটি বড় স্ট্রিং যুক্ত করি এবং যোগদান করি () প্রায় 10 গুণ দ্রুত সম্পাদন করে। 3 এবং 4 ক্ষেত্রে, আমরা একটি ছোট স্ট্রিং যুক্ত করি এবং '+' কিছুটা দ্রুত পারফর্ম করে


3

আমি এমন পরিস্থিতিতে ছুঁড়েছি যেখানে আমার অজানা আকারের পরিশিষ্টযোগ্য স্ট্রিং থাকা দরকার। এগুলিই বেঞ্চমার্ক ফলাফল (অজগর ২.7.৩):

$ python -m timeit -s 's=""' 's+="a"'
10000000 loops, best of 3: 0.176 usec per loop
$ python -m timeit -s 's=[]' 's.append("a")'
10000000 loops, best of 3: 0.196 usec per loop
$ python -m timeit -s 's=""' 's="".join((s,"a"))'
100000 loops, best of 3: 16.9 usec per loop
$ python -m timeit -s 's=""' 's="%s%s"%(s,"a")'
100000 loops, best of 3: 19.4 usec per loop

এটি দেখে মনে হচ্ছে যে '+ =' দ্রুততম। স্কাইমাইন্ড লিঙ্কের ফলাফলগুলি কিছুটা পুরানো।

(আমি বুঝতে পেরেছি যে দ্বিতীয় উদাহরণটি সম্পূর্ণ নয়, চূড়ান্ত তালিকায় যোগদানের প্রয়োজন হবে This তবে এটি দেখায় যে কেবল তালিকা প্রস্তুত করার জন্য স্ট্রিং কনক্যাটের চেয়ে বেশি সময় লাগে))


আমি তৃতীয় এবং চতুর্থ পরীক্ষার জন্য উপ 1-সেকেন্ড বার পাচ্ছি। কেন আপনি এত বেশি সময় পাচ্ছেন? পেস্টবিন.
com

@ অর্ণিয়াকা: তিনি সমস্ত পরীক্ষার জন্য 1-সেকেন্ডের জন্য সাব পেয়ে যাচ্ছেন। তিনি তৃতীয় ও চতুর্থ আসরে > 1 getting পাচ্ছেন , যা আপনি করেন নি। আমি সেই পরীক্ষাগুলিতে ধীর সময় পাই (পাইথন ২.7.৫, লিনাক্সে)। সিপিইউ, সংস্করণ হতে পারে, পতাকা তৈরি করতে পারে, কে জানে।
থানাটোস

এই মানদণ্ডের ফলাফলগুলি অকেজো। বিশেষত, প্রথম কেসটি, যা কোনও স্ট্রিং সংমিশ্রণ করছে না, কেবল দ্বিতীয় স্ট্রিংয়ের মান অক্ষত রয়েছে।
অ্যান্টি হাপাল

3

এক বছর পরে, আসুন মকোইস্টিনেনের উত্তরটি অজগর 3.4.3 দিয়ে পরীক্ষা করি:

  • প্লাস 0.963564149000 (95.83% দ্রুত হিসাবে)
  • 0.923408469000 (দ্রুত হিসাবে 100.00%) যোগদান করুন
  • ফর্ম 1.501130934000 (দ্রুত হিসাবে 61.51%)
  • INP 1.019677452000 (90.56% দ্রুত হিসাবে)

কিছুই পরিবর্তন হয়নি। যোগদান এখনও দ্রুততম পদ্ধতি। পাঠযোগ্যতার ক্ষেত্রে ইন্টিপটি তর্কযোগ্যভাবে সেরা পছন্দ হওয়ার সাথে সাথে আপনি তবুও ইন্টিপ ব্যবহার করতে চাইতে পারেন।


1
এটি মকোইস্টিনেন উত্তরের সংযোজন হতে পারে যেহেতু এটি একটি পুরোপুরি উড়িয়ে দেওয়া উত্তরের (অথবা কমপক্ষে আপনি যে কোডটি ব্যবহার করছেন সেটি যুক্ত করুন) ছোট।
ট্রেলারিয়ন

1

@ জেসনবেকারের মানদণ্ড দ্বারা অনুপ্রাণিত, এখানে একটি 10 ​​টি "abcdefghijklmnopqrstuvxyz"স্ট্রিংয়ের তুলনা করে একটি সহজ , .join()এটি দ্রুত দেখানো হচ্ছে; এমনকি ভেরিয়েবলের এই ক্ষুদ্রতর বৃদ্ধি সহ:

Catenation

>>> x = timeit.Timer(stmt='"abcdefghijklmnopqrstuvxyz" + "abcdefghijklmnopqrstuvxyz" + "abcdefghijklmnopqrstuvxyz" + "abcdefghijklmnopqrstuvxyz" + "abcdefghijklmnopqrstuvxyz" + "abcdefghijklmnopqrstuvxyz" + "abcdefghijklmnopqrstuvxyz" + "abcdefghijklmnopqrstuvxyz" + "abcdefghijklmnopqrstuvxyz" + "abcdefghijklmnopqrstuvxyz" + "abcdefghijklmnopqrstuvxyz"')
>>> x.timeit()
0.9828147209324385

যোগদান

>>> x = timeit.Timer(stmt='"".join(["abcdefghijklmnopqrstuvxyz", "abcdefghijklmnopqrstuvxyz", "abcdefghijklmnopqrstuvxyz", "abcdefghijklmnopqrstuvxyz", "abcdefghijklmnopqrstuvxyz", "abcdefghijklmnopqrstuvxyz", "abcdefghijklmnopqrstuvxyz", "abcdefghijklmnopqrstuvxyz", "abcdefghijklmnopqrstuvxyz", "abcdefghijklmnopqrstuvxyz", "abcdefghijklmnopqrstuvxyz"])')
>>> x.timeit()
0.6114138159765048

: গৃহীত উত্তর কটাক্ষপাত আছে এই প্রশ্নের (নিচে দীর্ঘ স্ক্রোল করুন) stackoverflow.com/questions/1349311/...
mshsayem

1

একটি জন্য ছোট সেট এর সংক্ষিপ্ত স্ট্রিং (অর্থাত 2 অথবা 3 কোন কয়েকটি অক্ষর বেশি স্ট্রিং), প্লাস এখনও পথ দ্রুততর। পাইথন 2 এবং 3 তে মকোয়েস্টিনেনের দুর্দান্ত স্ক্রিপ্ট ব্যবহার করা:

plus 2.679107467004 (100.00% as fast)
join 3.653773699996 (73.32% as fast)
form 6.594011374000 (40.63% as fast)
intp 4.568015249999 (58.65% as fast)

সুতরাং যখন আপনার কোডটি বিশাল সংখ্যক পৃথক ছোট ছোট কনটেন্টেশনগুলি করছে, ততক্ষণ গতি অত্যন্ত গুরুত্বপূর্ণ হলে পছন্দসই উপায় ।


1

সম্ভবত "পাইথন 3.6 এ নতুন এফ-স্ট্রিংগুলি" কনটেনেটিং স্ট্রিংগুলির সবচেয়ে কার্যকর উপায়।

% S ব্যবহার করা হচ্ছে

>>> timeit.timeit("""name = "Some"
... age = 100
... '%s is %s.' % (name, age)""", number = 10000)
0.0029734770068898797

। Formt ব্যবহার করা হচ্ছে

>>> timeit.timeit("""name = "Some"
... age = 100
... '{} is {}.'.format(name, age)""", number = 10000)
0.004015227983472869

>>> timeit.timeit("""name = "Some"
... age = 100
... f'{name} is {age}.'""", number = 10000)
0.0019175919878762215

সূত্র: https://realpython.com/python-f-strings/

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.