وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

پایتون: چگونه یک کاراکتر را از یک رشته حذف کنیم

0 328
زمان لازم برای مطالعه: 4 دقیقه


معرفی

در این راهنما، نگاهی به چگونه یک کاراکتر را از یک رشته در پایتون حذف کنیم.

رشته ها و به خصوص ورودی تولید شده توسط کاربر ممکن است حاوی کاراکترهای ناخواسته باشد، مانند کاراکترهای خاص در یک قسمت نام کاربری که نمی خواهیم ذخیره کنیم. در این موارد، ممکن است ترجیح دهیم کاراکترهای خاصی را از یک رشته معین حذف کنیم.

رایج ترین راه برای حذف یک کاراکتر از یک رشته با استفاده از replace() روش، اما ما همچنین می توانیم از آن استفاده کنیم translate() روش، و حتی جایگزین یکی یا بیشتر وقوع یک شخصیت معین

حذف کاراکتر در پایتون با استفاده از جایگزین کردن()

را string کلاس الف را فراهم می کند replace() روشی که کاراکتر دیگری را جایگزین می کند. شایان ذکر است که تابع او یک رشته جدید با کاراکترهای جایگزین شده برمی گرداند، زیرا رشته ها هستند تغییرناپذیر. رشته اصلی بدون تغییر باقی می‌ماند، اما شی موجود در حافظه از بین می‌رود مگر اینکه مرجعی به آن را زنده نگه داریم. به طور معمول، شما مقدار بازگشتی را یا به همان نشانگر یا یک نشانگر جدید اختصاص می دهید.

روش جایگزین می شود همه اتفاقات از یک شخصیت، با یک شخصیت جدید. مثلا، any_string.replace('a', 'b') جایگزین همه موارد خواهد شد 'a' که در any_string با شخصیت 'b'. به برداشتن یک کاراکتر از یک رشته از طریق replace()، آن را با یک کاراکتر خالی جایگزین می کنیم:

original_string = "رسانگار"

new_string = original_string.replace('a', '')
print("String after removing the character 'a':", new_string)

هنگامی که این کد را اجرا می کنیم، با استقبال مواجه می شویم:

String after removing the character 'a': stck buse

حذف کاراکتر در پایتون با استفاده از ترجمه کردن()

رشته های پایتون دارای یک translate() روشی که کاراکترها را با سایر کاراکترهای مشخص شده در a جایگزین می کند جدول ترجمه.

آ جدول ترجمه فقط یک فرهنگ لغت از نگاشت های کلید-مقدار است که در آن هر کلید با یک مقدار جایگزین می شود.

برای اینکه این روش کار کند، باید مقدار را مشخص کنیم مقدار یونیکد برای رشته ها، که ما می توانیم از طریق ord() تابع.

پیشنهاد می‌کنیم بخوانید:  کار با Datetime در پایتون با پیکان

مثلا، any_string.ranslate({ord('a'):ord('z'), ord('b'):ord('y')}) جایگزین وقوع خواهد شد 'a' با 'z' و 'b' با 'y'.

برای حذف یک کاراکتر از یک رشته با استفاده از translate()، باید مقدار یونیکد کاراکتر را با آن ترسیم کنید None در جدول ترجمه:

original_string = "رسانگار"

new_string = original_string.translate({ord('a'): None})
print("String after removing the character 'a':", new_string)

این کد نتیجه می دهد:

String after removing the character 'a': stck buse

تعدادی از اتفاقات یک کاراکتر را حذف کنید

را replace() و translate() متدها همه رخدادهای یک کاراکتر معین را با دیگری جایگزین می کنند. با این حال replace() متد یک آرگومان اختیاری می گیرد count. اگر داده شود فقط تعویض می کند count تعداد دفعات کاراکتر داده شده

بیایید سعی کنیم فقط اولی را حذف کنیم 'a' از رشته، به جای همه رخدادها:

original_string = "رسانگار"

new_string = original_string.replace('a',  '', 1)
print("String after removing the character 'a':", new_string)

خروجی کد بالا به شکل زیر خواهد بود:

String after removing the character 'a': stck abuse

همانطور که شمارش تنظیم شده است 1، تنها اولین وقوع از 'a' جایگزین می شود – این زمانی مفید است که می خواهید یک و تنها یک کاراکتر را حذف کنید.

به صورت دستی یک رشته جدید بدون کاراکتر ایجاد کنید

یک تکنیک تا حدودی باطنی، اما ساده ایجاد یک رشته خالی و حلقه از طریق رشته اصلی است. در حلقه، همه کاراکترها را در رشته جدید می نویسیم، به جز شخصیتی که باید حذف شود.

این در واقع چیزی است که در زیر کاپوت اتفاق می افتد، با مقداری اعتبار اضافی. از آنجایی که پایتون در C پیاده‌سازی می‌شود، می‌توانیم اوج را در آن بگیریم را stringobject.c کد منبع، که تعریف می کند replace() روشی که در نهایت هر دو را فراخوانی می کند replace_single_character() یا replace_single_character_in_place():

    start = self_s;
    end = self_s + self_len;
    while (count-- > 0) {
        next = findchar(start, end-start, from_c);
        if (next == NULL)
            break;

        if (next == start) {
            
            Py_MEMCPY(result_s, to_s, to_len);
            result_s += to_len;
            start += 1;
        } else {
            
            Py_MEMCPY(result_s, start, next-start);
            result_s += (next-start);
            Py_MEMCPY(result_s, to_s, to_len);
            result_s += to_len;
            start = next+1;
        }
    }
    
    Py_MEMCPY(result_s, start, end-start);

    return result;

برای درک میزان منطقی که در پشت APIهای ساده، بصری و سطح بالا انتزاع شده است، می توانیم این کار را انجام دهیم. process به صورت دستی:

def remove_character(original_string, character, occurrence_num):
    new_string = ""
    for char in original_string:
        if char == character and occurrence_num > 0:
            occurrence_num = occurrence_num-1
            continue
        else:
            new_string += char
    return new_string                
                
                
string = 'رسانگار'
print(remove_character(string, 'a', 0))
print(remove_character(string, 'a', 1))
print(remove_character(string, 'a', 2))

کد بالا خروجی زیر را تولید می کند:

رسانگار
stck abuse
stck buse

ما می توانیم ببینیم – روش خودمان تقریباً به همان شیوه عمل می کند replace() روش انجام می دهد، اما بسیار کمتر کارآمد است:

print("Time taken by manual method: {}"
    .format(timeit.timeit("remove_character('رسانگار', 'a', 1)", "from __main__ import remove_character")))
    
print("Time taken by replace(): {}"
    .format(timeit.timeit("'رسانگار'.replace('a', '', 1)")))

زمان بندی این روش ها منجر به موارد زیر می شود:

Time taken by manual method: 1.3785062030074187
Time taken by replace(): 0.13279212499037385

نتیجه

در این آموزش، روش حذف کاراکترها از یک رشته در پایتون را بررسی کردیم. ما روش استفاده از replace() و translate() روش هایی برای حذف کاراکترها با جایگزین کردن آنها با یک رشته خالی یا یونیکد آنها None.

بعداً استفاده کرده ایم replace() برای حذف تعداد از پیش تعریف شده از وقوع شخصیت داده شده، و حتی قدیمی خوب for حلقه را translate() اگر بخواهیم مجموعه ای از کاراکترها را حذف کنیم، این روش مفید است، زیرا می توانیم یک جدول ترجمه به آن بدهیم. و replace() اگر بخواهیم تعدادی از رخدادهای یک کاراکتر معین را حذف کنیم، این روش مفید است.

پیشنهاد می‌کنیم بخوانید:  Python - روش مرتب سازی لیست با sort() و sorted()

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-09 21:21:10

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید