Fahmy Mostafa نشر 21 يونيو 2021 أرسل تقرير نشر 21 يونيو 2021 هل من الممكن تقسيم سلسلة إلى عدد معين من الحروف؟ على سبيل المثال تقسيم النص التالي: '0123456789' لأحصل على التالي: ['01', '12', '23', '34', ….] حاولت أن أستعمل دالة split لكن لا يوجد رقم مكرر لكي أقوم بتقسيم النص بناءً عليه 2 اقتباس
0 محمد أبو عواد نشر 21 يونيو 2021 أرسل تقرير نشر 21 يونيو 2021 يمكننا فعل ذلك من خلال تعريف قائمة فارغة, ثم المرور على جميع عناصر السلسلة من خلال استخدام حلقة التكرار for وبداخل الحلقة نستخدم الدالة append, فيكون شكل الكود كالتالي str1 = '123456789'#السلسلة التي نريد تقسيمها myList = []#قمنا بتعريف قائمة فارغة for i in range(0, len(str1), 2):#حلقة للمرور على جميع عناصر السلسلة myList.append(str1[i : i + 2])# نقوم باضافة العناصر التي مررنا عليهاالى القائمة print(myList)#طباعة القائمة 1 اقتباس
1 Wael Aljamal نشر 21 يونيو 2021 أرسل تقرير نشر 21 يونيو 2021 كما يمكن استخدام التعابير المنتظمة regular expression : import re num_str = '123456' chunks = re.findall('\d{2}',num_str) # بحث عن أي سلسلة جزئية من أرقام طول رقمين print(chunks) حيث d تعبر عن digit أي رقم 0-9 1 اقتباس
0 عبدالباسط ابراهيم نشر 22 يونيو 2021 أرسل تقرير نشر 22 يونيو 2021 توجد دالة في لغة بايثون تقوم بالفكرة التي تريد تنفيذها وهي wrap من textwrap ويمكنك استخدامها كالتالي from textwrap import wrap #لاتنسى استدعائها أولاً s = '1234567890' wrap(s, 2) # نمرر أولاً النص ثم نمرر العرض أو عدد الحروف التي تريدها #الناتج # ['12', '34', '56', '78', '90'] 1 اقتباس
0 عبدالله عبدالرحمن11 نشر 24 يونيو 2021 أرسل تقرير نشر 24 يونيو 2021 هذا مُولد للحصول على الأجزاء التي تريدها def chunks(lst, n): for i in range(0, len(lst), n): yield lst[i:i + n] # يمكنك إستخدامها كالتالي import pprint pprint.pprint(list(chunks(range(10, 75), 10))) اما إذا كنت تستخدم بايثون إصدار 2 فيجب عليك إستخدام ()xrange بدلاً من ()range كما هو موضح في الكود def chunks(lst, n): for i in xrange(0, len(lst), n): yield lst[i:i + n] اقتباس
0 Ali Haidar Ahmad نشر 1 سبتمبر 2021 أرسل تقرير نشر 1 سبتمبر 2021 طرق أخرى: من خلال إنشاء مكرر على السلسلة بداخل الدالة map: list(map(''.join, zip(*[iter(s)]*2))) أو من خلال الدالة sliced: from more_itertools import sliced list(sliced(s, 2)) أو بالطريقة التالية من خلال الحلقات: s = '1234567890' n = 2 li=[s[i:i+n] for i in range(0, len(s), n)] li #['12', '34', '56', '78', '90'] للماقارنة بين كل الطرق السابقة: %timeit li=[s[i:i+n] for i in range(0, len(s), n)] %timeit list(map(''.join, zip(*[iter(s)]*2))) # الأفضل %timeit list(sliced(s, 2)) %timeit wrap(s, 2) # الأسوأ %timeit re.findall('\d{2}',s) # الأفضل """ 100000 loops, best of 5: 8.76 µs per loop 100000 loops, best of 5: 4.85 µs per loop 100000 loops, best of 5: 11 µs per loop 10000 loops, best of 5: 110 µs per loop 100000 loops, best of 5: 3.74 µs per loop """ اقتباس
السؤال
Fahmy Mostafa
هل من الممكن تقسيم سلسلة إلى عدد معين من الحروف؟
على سبيل المثال تقسيم النص التالي:
'0123456789'
لأحصل على التالي:
حاولت أن أستعمل دالة split لكن لا يوجد رقم مكرر لكي أقوم بتقسيم النص بناءً عليه
5 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.