در برنامهنویسی پایتون، کار با دادهها نقشی محوری ایفا میکند. یکی از ساختارهای دادهای رایج در پایتون، لیستها هستند که برای ذخیرهسازی مجموعههای مرتب از عناصر به کار میروند. از سوی دیگر، رشتهها نیز ساختار دادهای مهمی هستند که برای نمایش توالیای از کاراکترها استفاده میشوند.
در بسیاری از موقعیتها، نیاز به تبدیل یک رشته یا مجموعهای از رشتهها به یک لیست وجود دارد. این امر به منظور دستهبندی، پردازش و یا آنالیز دادههای رشتهای انجام میشود. در این مقاله در کندو، به بررسی روشهای مختلف تبدیل رشته به لیست در پایتون میپردازیم، پس تا انتهای این مقاله با آموزشگاه مهندسی کندو همراه باشید.
اهمیت تبدیل رشته به لیست در پایتون
رشتهها و لیستها دو نوع داده اساسی در پایتون هستند که هر کدام کاربردهای خاص خود را دارند. در حالی که رشتهها برای ذخیره توالی از کاراکترها استفاده میشوند، لیستها برای ذخیره مجموعهای از مقادیر استفاده میشوند. تبدیل رشته به لیست در بسیاری از موقعیتهای برنامهنویسی پایتون مفید است.
لیستها به شما این امکان را میدهند که به هر عنصر به صورت جداگانه دسترسی داشته باشید و آنها را دستکاری کنید. این امر در مواردی که نیاز به پردازش هر کلمه یا عدد جداگانه در یک رشته دارید، بسیار مفید است. همچنین شما میتوانید از توابع و روشهای مختلفی برای انجام عملیات روی عناصر لیست مانند مرتبسازی، فیلتر کردن و جستجو استفاده کنید. این کار با رشتهها به سادگی امکانپذیر نیست.
لیستها میتوانند برای ایجاد ساختارهای داده پیچیدهتر مانند دیکشنریها و نمودارها استفاده شوند. این ساختارها برای ذخیره و سازماندهی دادههای پیچیده بسیار مفید هستند.
به عنوان مثال، فرض کنید در حال نوشتن برنامهای برای تجزیه و تحلیل متن هستید. ممکن است بخواهید کلمات موجود در یک جمله را به یک لیست تبدیل کنید تا بتوانید آنها را به صورت جداگانه پردازش کنید. یا، ممکن است بخواهید لیستی از اعداد را از یک فایل متنی ایجاد کنید تا بتوانید آنها را به صورت آماری تجزیه و تحلیل کنید.
در زیر، چند نمونه از نحوه استفاده از تبدیل رشته به لیست در برنامههای واقعی را برای شما آوردهایم:
- استخراج دادهها از وب: میتوانید از عبارات منظم برای استخراج دادهها از صفحات وب و ذخیره آنها در لیست استفاده کنید.
- پردازش فایلهای متنی: میتوانید خطوط یک فایل متنی را به یک لیست تبدیل کنید و سپس هر خط را به صورت جداگانه پردازش کنید.
- تجزیه و تحلیل دادهها: میتوانید دادههای عددی را از یک منبع مانند CSV یا JSON به یک لیست تبدیل کنید و سپس آنها را به صورت آماری تجزیه و تحلیل کنید.
- ایجاد رابطهای کاربری: میتوانید از لیستها برای ذخیره و نمایش دادهها در رابطهای کاربری گرافیکی استفاده کنید.
همانطور که مشاهده میکنید، تبدیل رشته به لیست در پایتون یک ابزار قدرتمند در پایتون است که میتواند برای انجام طیف گستردهای از وظایف استفاده شود.
روشهای مختلف تبدیل رشته به لیست
در دوره پایتون، روشهای مختلفی برای تبدیل رشته به لیست آموزش داده میشود که هر کدام برای موقعیتها و نیازهای خاص مناسب هستند. در این بخش، به بررسی متداولترین روشها میپردازیم:
1. استفاده از متد ()split
متد ()split یکی از متداولترین روشها برای تبدیل رشته به لیست در پایتون است. این متد رشته را بر اساس یک جداکننده مشخص به زیررشتهها تقسیم میکند و هر زیررشته را به عنوان یک عنصر در لیست جدید قرار میدهد.
فرض کنید میخواهیم رشتهای به نام my_string را که شامل کلمات جدا شده با کاما است، به لیستی از کلمات مجزا تبدیل کنیم.
my_string = "This is a string with commas, spaces, and tabs."
separator = ","
list1 = my_string.split(separator)
print(list1)
در کد بالا، متد ()split با آرگومان separator که در این مثال “,” است، فراخوانی میشود. این متد رشته my_string را بر اساس کاماها به زیررشتهها تقسیم میکند و هر زیررشته را به عنوان یک عنصر در لیست list1 ذخیره میکند. خروجی کد به صورت زیر خواهد بود:
['This', 'is', 'a', 'string', 'with', 'commas', ...]
متد ()split به طور پیش فرض رشته را بر اساس فضای خالی () تقسیم میکند. اگر میخواهید از جداکننده دیگری استفاده کنید، باید آن را به عنوان آرگومان به متد ()split بدهید. همچنین متد ()split میتواند رشته را بر اساس چندین کاراکتر به طور همزمان تقسیم کند. برای مثال، اگر میخواهید رشته را بر اساس کاما و فضای خالی تقسیم کنید، میتوانید از کد زیر استفاده کنید:
list1 = my_string.split(", ")
متد ()split میتواند تعداد حداکثر زیررشتههای ایجاد شده را محدود کند. برای مثال، اگر میخواهید فقط دو زیررشته ایجاد کنید، میتوانید از کد زیر استفاده کنید:
list1 = my_string.split(",", 1)
در این مثال، list1 فقط شامل دو عنصر خواهد بود: اولین زیررشته قبل از اولین کاما و دومین زیررشته باقیمانده رشته.
از دیگر مثالهای متد اسپلیت میتوان به موارد زیر اشاره کرد:
استخراج آدرس ایمیل از رشته:
email_string = "[email protected]"
list1 = email_string.split("@")
print(list1[0]) # Output: user
print(list1[1]) # Output: example.com
جداسازی نام و نام خانوادگی از رشته:
name_string = "John Doe"
list1 = name_string.split()
print(list1[0]) # Output: John
print(list1[1]) # Output: Doe
تقسیم رشتهای از اعداد با فاصله:
numbers_string = "10 20 30 40 50"
list1 = numbers_string.split()
list2 = [int(num) for num in list1]
print(list2) # Output: [10, 20, 30, 40, 50]
همانطور که مشاهده کردید، متد split() ابزاری قدرتمند و انعطافپذیر برای تبدیل رشته به لیست در پایتون است. با کمی خلاقیت، میتوانید از این متد برای حل طیف گستردهای از وظایف مربوط به دستکاری رشته استفاده کنید.
2. استفاده از متد ()list
متد ()list یکی دیگر از روشهای تبدیل رشته به لیست در پایتون است. این متد یک شیء قابل پیمایش (مانند رشته) را به عنوان آرگومان دریافت میکند و یک لیست جدید حاوی عناصر آن شیء را برمیگرداند. فرض کنید میخواهیم رشتهای به نام my_string را که شامل کاراکترها است، به لیستی از کاراکترها تبدیل کنیم.
my_string = "Hello, world!"
list1 = list(my_string)
print(list1)
در کد بالا، متد ()list با آرگومان my_string فراخوانی میشود. این متد هر کاراکتر در my_string را به عنوان یک عنصر در لیست list1 ذخیره میکند. خروجی کد به صورت زیر خواهد بود:
['H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!']
متد ()list میتواند هر شیء قابل پیمایشی را به لیست تبدیل کند، نه فقط رشتهها. به عنوان مثال، میتوانید از آن برای تبدیل تاپلها، دیکشنریها و حتی اعداد به لیست استفاده کنید. اگر میخواهید رشتهای را به لیستی از عناصر جداگانه تبدیل کنید، استفاده از متد ()split معمولاً مناسبتر است.
از دیگر مثالهای متد لیست میتوان به موارد زیر اشاره کرد:
تبدیل دیکشنری به لیست (کلیدها یا مقادیر):
my_dict = {"key1": 1, "key2": 2, "key3": 3}
list1 = list(my_dict.keys())
print(list1) # Output: ['key1', 'key2', 'key3']
list2 = list(my_dict.values())
print(list2) # Output: [1, 2, 3]
3. استفاده از تابع ()re.findall
تابع ()re.findall در کتابخانه re پایتون برای یافتن و استخراج الگوهای مطابقت با یک عبارت منظم از یک رشته استفاده میشود. این تابع نتایج را به صورت لیستی از رشتهها یا زیررشتهها برمیگرداند. فرض کنید میخواهیم تمام اعداد موجود در یک رشته را استخراج کنیم و آنها را در یک لیست ذخیره کنیم.
import re
my_string = "This string has numbers 123, 456, and 789."
pattern = r"\d+" # Regular expression pattern for matching digits
numbers = re.findall(pattern, my_string)
print(numbers) # Output: ['123', '456', '789']
در کد بالا، ما کتابخانه re را با استفاده از دستور import وارد میکنیم. یک رشته به نام my_string تعریف میکنیم که شامل اعدادی است که میخواهیم استخراج کنیم. سپس یک الگوی عبارت منظم به نام pattern تعریف میکنیم که با استفاده از r به عنوان پیشوند، نویسههای backslash را خام میکند. این الگو (\d+) به دنبال یک یا چند رقم (\d) است. در نهایت از تابع re.findall() با آرگومانهای pattern و my_string استفاده میکنیم.
این تابع تمام زیررشتههای my_string که با الگوی pattern مطابقت دارند را پیدا میکند و آنها را به صورت لیستی به نام numbers برمیگرداند.
از دیگر مثالهای استفاده از تابع re.findall میتوان به موارد زیر اشاره کرد:
استخراج آدرسهای ایمیل از متن:
import re
text = "Contact us at [email protected] or [email protected]."
pattern = r"[a-z0-9]+@[a-z]+\.[a-z]{2,}"
emails = re.findall(pattern, text)
print(emails) # Output: ['[email protected]', '[email protected]']
استخراج URLها از متن:
import re
text = "Visit our website at https://www.example.com and check our blog at http://blog.example.com."
pattern = r"(https?://[A-Za-z0-9./]+)\w{2,}"
urls = re.findall(pattern, text)
print(urls) # Output: ['https://www.example.com', 'http://blog.example.com']
استخراج هشتگها از توییت:
import re
tweet = "#Python is awesome! #DataScience
#MachineLearning"
pattern = r"#\w+"
hashtags = re.findall(pattern, tweet)
print(hashtags) # Output: ['#Python', '#DataScience', '#MachineLearning']
تابع ()re.findall فقط زیررشتههایی را برمیگرداند که به طور کامل با الگوی عبارت منظم مطابقت داشته باشند. برای استخراج زیررشتهها با مطابقتهای جزئی، میتوانید از تابع ()re.search یا ()re.match استفاده کنید. دقت کنید که الگوهای عبارات منظم میتوانند پیچیدهتر باشند و شامل انواع مختلفی از کاراکترها و دستورات باشند.
در آخر، تابع ()re.findall ابزاری قدرتمند برای یافتن و استخراج اطلاعات از رشتهها در پایتون است. با استفاده از الگوهای عبارات منظم مناسب، میتوانید طیف گستردهای از دادهها را از متن استخراج کرده و آنها را در لیستها ذخیره کنید.
4. استفاده از تکنیک list comprehension
یکی دیگر از تیکنیکهای تبدیل رشته به لیست در پایتون، تکنیک list comprehension در پایتون است که روشی فشرده و خوانا برای ایجاد لیستها به شمار میرود. این روش برای تبدیل رشته به لیست نیز بسیار کاربردی است. در ادامه، نحوه انجام این کار را با استفاده از مثال هایی شرح میدهیم:
مثال 1: تبدیل یک رشته به لیستی از کاراکترها
فرض کنید رشتهای به نام my_string داریم که حاوی متنی است. میخواهیم این رشته را به لیستی از کاراکترهای مجزا تبدیل کنیم.
my_string = "This is an example string"
characters_list = [char for char in my_string]
print(characters_list)
در کد بالا، list comprehension از یک حلقه for برای پیمایش هر کاراکتر در my_string استفاده میکند. برای هر کاراکتر، آن را به لیست جدید characters_list اضافه میکند. خروجی این کد به صورت زیر خواهد بود:
['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', 'n', ' ', 'e', 'x', 'a', 'm', 'p', 'l', 'e', ' ', 's', 't', 'r', 'i', 'n', 'g']
مثال 2: تبدیل رشته به لیستی از اعداد صحیح
فرض کنید رشتهای به نام numbers_string داریم که حاوی اعداد جدا شده با کاما است. میخواهیم این رشته را به لیستی از اعداد صحیح تبدیل کنیم.
numbers_string = "12, 45, 78, 92"
numbers_list = [int(num) for num in numbers_string.split(",")]
print(numbers_list)
در کد بالا، ابتدا رشته numbers_string را با استفاده از تابع split() به لیستی از رشتههای جداگانه بر اساس کاما تقسیم میکنیم. سپس از list comprehension برای پیمایش لیست جدید و تبدیل هر رشته به عدد صحیح با استفاده از تابع int() استفاده میکنیم. خروجی این کد به صورت زیر خواهد بود:
[12, 45, 78, 92]
مثال 3: تبدیل رشته به لیستی از کلمات با حروف بزرگ
فرض کنید رشتهای به نام sentence داریم که حاوی جملهای است. میخواهیم این جمله را به لیستی از کلمات با حروف بزرگ تبدیل کنیم.
sentence = "this is a sample sentence"
words_list = [word.upper() for word in sentence.split()]
print(words_list)
در کد بالا، ابتدا جمله sentence را با استفاده از تابع split() به لیستی از کلمات جدا میکنیم. سپس از list comprehension برای پیمایش لیست جدید و تبدیل هر کلمه به حروف بزرگ با استفاده از متد upper() استفاده میکنیم.
خروجی این کد به صورت زیر خواهد بود:
['THIS', 'IS', 'A', 'SAMPLE', 'SENTENCE']
5. استفاده از تابع ()enumerate
در حالی که تابع ()enumerate در پایتون به طور خاص برای تبدیل رشته به لیست طراحی نشده است، میتوان از آن به همراه کمی خلاقیت برای رسیدن به این هدف استفاده کرد. در اینجا دو روش برای انجام این کار وجود دارد:
روش 1: استفاده از ()enumerate و ()list
از ()enumerate برای پیمایش در رشته و ایجاد یک ژنراتور از جفتهای (index, character) استفاده کنید. با استفاده از ()list ژنراتور را به یک لیست تبدیل کنید.
def str_to_list(string):
return list(enumerate(string))
#مثال
string = "سلام دنیا!"
result = str_to_list(string)
print(result)
این کد خروجی زیر را تولید میکند:
[(0, 'س'), (1, 'ل'), (2, 'ا'), (3, 'م'), (4, ' '), (5, 'د'), (6, 'و'), (7, 'ن'), (8, 'ی'), (9, 'ا'), (10, '!')]
روش 2: استفاده از ()enumerate و تفکیک رشته
از ()enumerate برای پیمایش در رشته و استخراج هر کاراکتر استفاده کنید. از عملگر + برای الحاق کاراکترها به یک لیست خالی استفاده کنید.
def str_to_list(string):
result = []
for i, char in enumerate(string):
result.append(char)
return result
#مثال
string = "سلام دنیا!"
result = str_to_list(string)
print(result)
این کد خروجی مشابه روش 1 را تولید میکند.
روش 1 از حافظه کمتری استفاده میکند، زیرا فقط یک ژنراتور ایجاد میکند و نه یک لیست موقت. روش 2 ممکن است برای خواندن انسان کمی واضحتر باشد. هر دو روش معادل هستند و میتوانید از روشی که ترجیح میدهید استفاده کنید.
علاوه بر این روش ها، کتابخانههای شخص ثالثی مانند itertools نیز وجود دارند که ممکن است عملکردهای مفیدی برای تبدیل رشتهها به لیستها ارائه دهند.
استفاده از تابع ()ast.literal
تابع ()ast.literal_eval در کتابخانه ast پایتون برای تبدیل یک رشته که نمایش یک ساختار داده پایتون را نشان میدهد به شیء پایتون مربوطه استفاده میشود. این تابع برای تجزیه و تحلیل رشتههای امن که فقط شامل ساختارهای داده پایه پایتون مانند رشتهها، اعداد، لیستها، دیکشنریها، مجموعهها و مقادیر بولئنی هستند، مفید است.
مثال:
import ast
data_str = "[1, 2, 3, 'Hello', {'key': 'value'}]"
data_list = ast.literal_eval(data_str)
print(data_list)
خروجی:
[1, 2, 3, 'Hello', {'key': 'value'}]
()ast.literal_eval فقط ساختارهای داده پایه پایتون را تجزیه و تحلیل میکند. رشتههای پیچیدهتر یا اشیاء سفارشی ممکن است باعث خطا شوند. برای امنیت، از ()ast.literal_eval فقط برای تجزیه و تحلیل رشتههای قابل اعتماد استفاده کنید. رشتههای ناشناخته یا غیرقابل اعتماد ممکن است کد مخرب را اجرا کنند.
()ast.literal_eval جایگزینی برای ()eval است. ()eval میتواند کد دلخواه را اجرا کند، که میتواند خطرناک باشد، در حالی که ()ast.literal_eval فقط ساختارهای داده امن را تجزیه و تحلیل میکند.
استفاده از JSON برای تبدیل رشته به لیست در پایتون
در حالی که JSON به طور خاص برای تبدیل رشته به لیست طراحی نشده است، میتوان از آن به طور غیرمستقیم با استفاده از کتابخانه json پایتون برای رسیدن به این هدف استفاده کرد. در ادامه مراحلی وجود دارد که برای تبدیل str به list باید دنبال کنید:
- رشته JSON را بارگیری کنید: ابتدا باید رشته JSON خود را به یک شیء پایتون تبدیل کنید. میتوانید این کار را با استفاده از تابع ()json.loads انجام دهید.
import json
json_string = '{"name": "John Doe", "age": 30, "city": "New York"}'
data = json.loads(json_string)
- شیء را به لیست تبدیل کنید: از آنجا که یک شیء JSON میتواند به عنوان یک دیکشنری پایتون نمایش داده شود، میتوانید از روشهای مختلفی برای تبدیل آن به لیست استفاده کنید. یک روش ساده استفاده از حلقه for برای پیمایش در دیکشنری و اضافه کردن مقادیر به یک لیست خالی است:
data_list = []
for value in data.values():
data_list.append(value)
- از کتابخانه collections استفاده کنید: کتابخانه collections پایتون کلاسهای مفیدی برای کار با دادهها ارائه میدهد، از جمله deque که میتواند به عنوان یک لیست دوطرفه استفاده شود. میتوانید از deque برای تبدیل یک شیء JSON به لیست به روشی حافظه کارآمد استفاده کنید:
from collections import deque
data_list = deque(data.values())
اگر فقط به مقادیر در شیء JSON خود اهمیت میدهید، میتوانید از ()data.values به جای data در حلقه for خود استفاده کنید. روش deque ممکن است برای مجموعه دادههای بزرگ کارآمدتر باشد، زیرا از حافظه کمتری استفاده میکند و نیازی به ایجاد یک لیست موقت نیست. شما همچنین میتوانید از کتابخانههای شخص ثالث مانند toolz یا Cython برای تبدیل کارآمدتر اشیاء JSON به لیستها استفاده کنید.
به یاد داشته باشید که تبدیل مستقیم یک رشته JSON به لیست همیشه ممکن نیست، زیرا ساختار JSON میتواند پیچیدهتر از یک لیست ساده باشد. در این موارد، ممکن است لازم باشد از روشهای پیشرفتهتری برای تجزیه و تحلیل دادهها و استخراج اطلاعات مورد نیاز خود استفاده کنید.
بعد از اینکه دانستید زبان برنامه نویسی پایتون Python چیست، میتوانید برای یادگیری مباحث و مفاهیم عمیقتر آن، اقدام کنید.
سخن نهایی
در این مقاله در کندو، روشهای مختلف تبدیل رشته و رشتهها به لیست در پایتون را بررسی کردیم. با استفاده از توابع داخلی پایتون مانند ()split(), listو … میتوان به سادگی رشتهها را به لیستهای حاوی عناصر جداگانه تبدیل کرد. همچنین، میتوان از عبارات لیست برای ایجاد لیست از مقادیر تکراری یا دنبالههای عددی استفاده کرد. ممنون که تا انتهای این مقاله با ما همراه بودید، امیدواریم که مقاله فوق برای شما مفید واقع شده باشد. 10 کامند پرکاربرد در پایتون را قبلا در کندو بررسی کردیم و میتوانید برای خواندن آن مطلب، اینجا کلیک کنید.
سوالات متداول
1. چگونه میتوان یک رشته را با جداکنندههای مختلف به لیست تبدیل کرد؟
شما باید از تابع split() با مشخص کردن جداکننده به عنوان آرگومان استفاده کنید.
مثال:
my_string = "This is a string with commas, spaces, and tabs."
list1 = my_string.split(",")
list2 = my_string.split(" ")
list3 = my_string.split("\t")
print(list1) # Output: ['This', 'is', 'a', 'string', 'with', 'commas', ...]
print(list2) # Output: ['This', 'is', 'a', 'string', 'with', 'commas', ...]
print(list3) # Output: ['This', 'is', 'a', 'string', 'with', 'commas', ...]
2. چگونه میتوان یک رشته را به لیستی از مقادیر تکراری تبدیل کرد؟
برای این کار باید از عبارات لیست با ضرب یک عنصر در تعداد تکرارها استفاده کنید.
مثال:
my_string = "A"
list1 = [my_string for i in range(5)]
print(list1) # Output: ['A', 'A', 'A', 'A', 'A']
3. چگونه میتوان دنبالهای از اعداد را به لیست تبدیل کرد؟
شما میتوانید از تابع ()range یا عبارات لیست استفاده کنید.
مثال:
list1 = range(10) # Creates a list of numbers from 0 to 9 (inclusive)
list2 = [i for i in range(1, 11)] # Creates a list of numbers from 1 to 10 (inclusive)
print(list1) # Output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list2) # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
4. چگونه میتوان از تبدیل یک رشته حاوی اعداد به لیست اعداد جلوگیری کرد؟
برای این کار شما باید از تابع ()map با تابع ()int به عنوان تابع تبدیل استفاده کنید.
مثال:
my_string = "1, 2, 3, 4, 5"
list1 = map(int, my_string.split(","))
print(list(list1)) # Output: [1, 2, 3, 4, 5]
5. چه کتابخانههایی برای کار با رشتهها و لیستها در پایتون وجود دارند؟
کتابخانههای استاندارد پایتون مانند re و string برای کار با رشتهها و کتابخانه collections برای کار با لیستها و ساختارهای دادهای دیگر مفید هستند.