string - নির্দিষ্ট দৈর্ঘ্যের স্ট্রিং পুনরাবৃত্তি করুন
python repeat (9)
আমি এটা ব্যবহার করি:
def extend_string(s, l):
return (s*l)[:l]
একটি নির্দিষ্ট দৈর্ঘ্য একটি স্ট্রিং পুনরাবৃত্তি করার একটি কার্যকর উপায় কি? যেমন: repeat('abc', 7) -> 'abcabca'
এখানে আমার বর্তমান কোড:
def repeat(string, length):
cur, old = 1, string
while len(string) < length:
string += old[cur-1]
cur = (cur+1)%len(old)
return string
এই কি একটি ভাল (আরো পাইথনিক) উপায় আছে? হয়তো তালিকা বোঝার ব্যবহার করে?
আরেকটি FP Aproach:
def repeat_string(string_to_repeat, repetitions):
return ''.join([ string_to_repeat for n in range(repetitions)])
এই সুন্দর Pythonic হয়:
newstring = 'abc'*5
print newstring[0:6]
এটি একটি তালিকা বোঝার ব্যবহার করে এটি করার এক উপায়, যদিও এটি ক্রমবর্ধমান ক্রমবর্ধমান ক্রমবর্ধমান rpt
স্ট্রিং বৃদ্ধি হিসাবে।
def repeat(rpt, length):
return ''.join([rpt for x in range(0, (len(rpt) % length))])[:length]
সম্ভবত সবচেয়ে দক্ষ সমাধান না, কিন্তু অবশ্যই সংক্ষিপ্ত এবং সহজ:
def repstr(string, length):
return (string * length)[0:length]
repstr("foobar", 14)
"Foobarfoobarfo" দেয়। এই সংস্করণ সম্পর্কে একটি জিনিস যে দৈর্ঘ্য <লেন (স্ট্রিং) তারপর আউটপুট স্ট্রিং কাটা হবে। উদাহরণ স্বরূপ:
repstr("foobar", 3)
"Foo" দেয়।
সম্পাদন করুন: আসলে আমার অবাক হওয়ার সাথে সাথে, এটি বর্তমানে স্বীকৃত সমাধান ('repeat_to_length' ফাংশন) এর চেয়ে দ্রুত, কমপক্ষে ছোট স্ট্রিংগুলিতে:
from timeit import Timer
t1 = Timer("repstr('foofoo', 30)", 'from __main__ import repstr')
t2 = Timer("repeat_to_length('foofoo', 30)", 'from __main__ import repeat_to_length')
t1.timeit() # gives ~0.35 secs
t2.timeit() # gives ~0.43 secs
সম্ভবত স্ট্রিং লম্বা ছিল, অথবা দৈর্ঘ্য খুব বেশি ছিল (অর্থাৎ, যদি string * length
অংশটি নষ্ট হয়ে যায়) তাহলে এটি খারাপভাবে সঞ্চালিত হবে। এবং আসলে আমরা এটি যাচাই করতে উপরে সংশোধন করতে পারি:
from timeit import Timer
t1 = Timer("repstr('foofoo' * 10, 3000)", 'from __main__ import repstr')
t2 = Timer("repeat_to_length('foofoo' * 10, 3000)", 'from __main__ import repeat_to_length')
t1.timeit() # gives ~18.85 secs
t2.timeit() # gives ~1.13 secs
string * (length / len(string)) + string[0:(length % len(string))]
সম্পর্কে string * (length / len(string)) + string[0:(length % len(string))]
def extended_string (word, length) :
extra_long_word = word * (length//len(word) + 1)
required_string = extra_long_word[:length]
return required_string
print(extended_string("abc", 7))
def rep(s, m):
a, b = divmod(m, len(s))
return s * a + s[:b]
from itertools import cycle, islice
def srepeat(string, n):
return ''.join(islice(cycle(string), n))