জেসন শায়িয়ারের উত্তরটি সঠিক তবে এটি আরও কিছু ব্যবহার করতে পারে।
প্রথমে, একটি স্ট্রিংকে বারবার সংখ্যার পুনরাবৃত্তি করতে, আপনি ওভারলোড হওয়া গুণটি ব্যবহার করতে পারেন:
>>> 'abc' * 7
'abcabcabcabcabcabcabc'
সুতরাং, একটি স্ট্রিং পুনরাবৃত্তি না হওয়া পর্যন্ত এটা অন্তত দীর্ঘ দৈর্ঘ্য যদি আপনি চান হিসাবে, আপনি পুনরাবৃত্তি যথাযথ সংখ্যা গণনা এবং যে গুণ অপারেটর ডান দিকে বসিযে হিসাবে:
def repeat_to_at_least_length(s, wanted):
return s * (wanted//len(s) + 1)
>>> repeat_to_at_least_length('abc', 7)
'abcabcabc'
তারপরে, আপনি এটি অ্যারের টুকরোগুলির সাহায্যে সঠিক দৈর্ঘ্যে ছাঁটাই করতে পারেন:
def repeat_to_length(s, wanted):
return (s * (wanted//len(s) + 1))[:wanted]
>>> repeat_to_length('abc', 7)
'abcabca'
বিকল্প হিসাবে, পিলমোডের উত্তরে বলা হয়েছে যে সম্ভবত আর কেউ খেয়াল করার মতো যথেষ্ট পরিমাণে স্ক্রল করে না, আপনি divmod
একবারে একবারে প্রয়োজনীয় পূর্ণ পুনরাবৃত্তির সংখ্যা এবং অতিরিক্ত অক্ষরের সংখ্যা গণনা করতে ব্যবহার করতে পারেন :
def pillmod_repeat_to_length(s, wanted):
a, b = divmod(wanted, len(s))
return s * a + s[:b]
কোনটা ভাল? আসুন এটি মাপদণ্ড করুন:
>>> import timeit
>>> timeit.repeat('scheirer_repeat_to_length("abcdefg", 129)', globals=globals())
[0.3964178159367293, 0.32557755894958973, 0.32851039397064596]
>>> timeit.repeat('pillmod_repeat_to_length("abcdefg", 129)', globals=globals())
[0.5276265419088304, 0.46511475392617285, 0.46291469305288047]
সুতরাং, পিলমোডের সংস্করণটি 40% ধীর গতির মতো, যা খুব খারাপ personally এর প্রায় বেশ কয়েকটি সম্ভাব্য কারণ রয়েছে, এটি প্রায় 40% আরও বাইকোড নির্দেশাবলীর সাথে সংকলন করে শুরু হয়।
দ্রষ্টব্য: এই উদাহরণগুলি //
পূর্ণসংখ্যা বিভাগ কেটে নেওয়ার জন্য নতুন-ইশ অপারেটর ব্যবহার করে। এটিকে প্রায়শই পাইথন 3 বৈশিষ্ট্য বলা হয় , তবে পিইপি 238 অনুসারে এটি পাইথন ২.২-এ ফিরে সমস্ত পথে চালু হয়েছিল। আপনি শুধুমাত্র আছে পাইথন 3 (অথবা মডিউল আছে এটি ব্যবহার করতে from __future__ import division
) কিন্তু আপনি করতে পারেন এটা নির্বিশেষে ব্যবহার করুন।
//
পাইথন 3? বা সরিয়ে ফেলা+1
এবং সিলিং ফাংশনে একটি স্পষ্ট কল ব্যবহার করা যথেষ্ট। এছাড়াও, একটি দ্রষ্টব্য: উত্পন্ন স্ট্রিংটির আসলে অতিরিক্ত পুনরাবৃত্তি হয় যখন এটি সমানভাবে ভাগ হয়; অতিরিক্ত স্প্লাইস দ্বারা কাটা হয়। প্রথমে আমাকে বিভ্রান্ত করেছে।