স্ট্রিং থেকে সব সংখ্যা (ডিজিট) বের করার জন্য split() এবং isdigit() মেথড ব্যবহার করে লিস্ট কম্প্রিহেনশন তৈরি করা হয়।
উদাহরণ
my_string = "python is 12 fun 2 learn"
print("স্ট্রিং:", my_string)
# স্পেস দিয়ে ভাগ করে প্রতিটি শব্দ চেক করা
numbers = [int(word) for word in my_string.split() if word.isdigit()]
print("নাম্বার লিস্ট:", numbers)
আউটপুট
স্ট্রিং: python is 12 fun 2 learn
নাম্বার লিস্ট: [12, 2]
ব্যাখ্যা
my_string.split()— স্পেস দিয়ে শব্দগুলোতে ভাগ করেword.isdigit()— শব্দটি পুরোপুরি ডিজিট কিনা চেক করেint(word)— স্ট্রিংকে ইন্টিজারে রূপান্তর করে
সীমাবদ্ধতা
এই পদ্ধতিটি শুধু **স্পেস-সেপারেটেড** সংখ্যা খুঁজে পায়। যেমন:
"abc123def" → [] # খুঁজে পাবে না
"price: $100" → [] # $ চিহ্ন থাকায় isdigit() False
উন্নত পদ্ধতি: Regex (re.findall)
import re
text = "python is 12 fun 2 learn, price $100, version 3.14"
numbers = [int(x) for x in re.findall(r'\d+', text)]
print(numbers) # [12, 2, 100, 3, 14]
# ডেসিমাল নাম্বার পেতে
decimals = re.findall(r'\d+\.\d+', text)
print(decimals) # ['3.14']
সব ধরনের সংখ্যা (নেগেটিভ, ডেসিমাল, সاينটিফিক)
import re
text = "temp -5.5, value 1e3, count 42"
# সাইনটিফিক নোটেশন, ডেসিমাল, নেগেটিভ
pattern = r'-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?'
numbers = [float(x) for x in re.findall(pattern, text)]
print(numbers) # [-5.5, 1000.0, 42.0]