প্রশ্ন: আমি এক স্ট্রিংয়ে লাইন পেতে স্প্লিট ('\ n') ব্যবহার করছি এবং দেখতে পেয়েছি যে '' .স্প্লিট () খালি তালিকা ফিরে আসে [], যখন '' .স্প্লিট ('\ n') ফিরে আসে [''] ।
Str.split () পদ্ধতি দুই আলগোরিদিম হয়েছে। যদি কোনও যুক্তি না দেওয়া হয় তবে এটি বারবার হোয়াইট স্পেসে বিভক্ত হয়। যাইহোক, যদি কোনও যুক্তি দেওয়া হয়, তবে এটি কোনও পুনরাবৃত্ত রান ছাড়া একক ডিলিমিটার হিসাবে বিবেচিত হবে।
একটি খালি স্ট্রিং বিভক্ত করার ক্ষেত্রে, প্রথম মোড (কোনও যুক্তি নেই) খালি তালিকা ফিরিয়ে দেবে কারণ সাদা স্থান খেয়েছে এবং ফলাফল তালিকায় রাখার কোনও মান নেই।
বিপরীতে, দ্বিতীয় মোড (যেমন একটি যুক্তি সহ \n
) প্রথম খালি ক্ষেত্র উত্পাদন করবে। আপনি যদি লিখেছিলেন তবে বিবেচনা করুন '\n'.split('\n')
, আপনি দুটি ক্ষেত্র পাবেন (একটি বিভক্তি, আপনাকে দুটি অর্ধেক দেয়)
প্রশ্ন: এ জাতীয় পার্থক্যের কোনও নির্দিষ্ট কারণ আছে কি?
এই প্রথম মোডটি কার্যকর হয় যখন ডেটা কলামগুলিতে স্বর্ণের পরিমাণের পরিবর্তনশীল পরিমাণের সাথে সংযুক্ত থাকে। উদাহরণ স্বরূপ:
>>> data = '''\
Shasta California 14,200
McKinley Alaska 20,300
Fuji Japan 12,400
'''
>>> for line in data.splitlines():
print line.split()
['Shasta', 'California', '14,200']
['McKinley', 'Alaska', '20,300']
['Fuji', 'Japan', '12,400']
দ্বিতীয় মোডটি সিএসভি-র মতো সীমিত তথ্যের জন্য দরকারী যেখানে বার বার কমা খালি ক্ষেত্রকে বোঝায়। উদাহরণ স্বরূপ:
>>> data = '''\
Guido,BDFL,,Amsterdam
Barry,FLUFL,,USA
Tim,,,USA
'''
>>> for line in data.splitlines():
print line.split(',')
['Guido', 'BDFL', '', 'Amsterdam']
['Barry', 'FLUFL', '', 'USA']
['Tim', '', '', 'USA']
দ্রষ্টব্য, ফলাফলের ক্ষেত্রগুলির সংখ্যা প্রেরণকারীর সংখ্যার চেয়ে একটি বেশি। দড়ি কাটার কথা ভাবুন। আপনি যদি কোনও কাট না করেন তবে আপনার একটি টুকরা রয়েছে। একটি কাটা তৈরি, দুটি টুকরা দেয়। দুটি কাটা করা, তিন টুকরা দেয়। এবং তাই এটি পাইথনের স্ট্রিয়রস্প্লিট (ডিলিমিটার) পদ্ধতির সাথে:
>>> ''.split(',') # No cuts
['']
>>> ','.split(',') # One cut
['', '']
>>> ',,'.split(',') # Two cuts
['', '', '']
প্রশ্ন: এবং স্ট্রিংয়ে লাইন গণনা করার আরও কোনও সুবিধাজনক উপায় নেই?
হ্যাঁ, কয়েকটি সহজ উপায় আছে। এর মধ্যে একটি স্ট্রকাউন্ট () এবং অন্যটি স্ট্রিংস্প্লিটলাইন () ব্যবহার করে । চূড়ান্ত লাইনটি অনুপস্থিত না হলে উভয় উপায়ে একই উত্তর দেবে \n
। যদি চূড়ান্ত নিউলাইনটি অনুপস্থিত থাকে তবে স্ট্রিমস্প্লিটলাইনগুলি সঠিক উত্তর দেবে। একটি দ্রুত প্রযুক্তি যা সঠিক তা গণনা পদ্ধতি ব্যবহার করে তবে চূড়ান্ত নিউলাইনের জন্য এটি সংশোধন করে:
>>> data = '''\
Line 1
Line 2
Line 3
Line 4'''
>>> data.count('\n') # Inaccurate
3
>>> len(data.splitlines()) # Accurate, but slow
4
>>> data.count('\n') + (not data.endswith('\n')) # Accurate and fast
4
@ কাজ থেকে প্রশ্ন: কেন হ্যাক দুটি খুব পৃথক পৃথক পৃথক অ্যালগরিদম জুতো-শিংযুক্ত একটি ফাংশনে?
Str.split এর স্বাক্ষরটি প্রায় 20 বছর পুরনো এবং সেই যুগের বেশ কয়েকটি এপিআই কঠোরভাবে ব্যবহারিক। নিখুঁত না হলেও পদ্ধতিটির স্বাক্ষরটি "ভয়ঙ্কর" নয়। বেশিরভাগ ক্ষেত্রে, গিডোর এপিআই নকশা পছন্দগুলি সময়ের পরীক্ষায় দাঁড়িয়েছে।
বর্তমান এপিআই সুবিধা ছাড়াই নয়। স্ট্রিংগুলি বিবেচনা করুন যেমন:
ps_aux_header = "USER PID %CPU %MEM VSZ"
patient_header = "name,age,height,weight"
এই স্ট্রিংগুলি ক্ষেত্রগুলিতে ভাঙ্গতে বলা হলে লোকেরা একই ইংরেজি শব্দ, "বিভক্ত" ব্যবহার করে উভয়কেই বর্ণনা করতে থাকে। fields = line.split()
বা যেমন কোড পড়তে বলা হয় fields = line.split(',')
, লোকেরা "ক্ষেত্রগুলিতে একটি রেখা বিভক্ত করে" হিসাবে বক্তব্যগুলিকে সঠিকভাবে ব্যাখ্যা করতে থাকে।
মাইক্রোসফ্ট এক্সেলের পাঠ্য-থেকে-কলামগুলির সরঞ্জাম একই অনুরূপ এপিআই পছন্দ করেছে এবং একই সরঞ্জামে উভয় বিভাজন অ্যালগরিদমকে অন্তর্ভুক্ত করে। একাধিক অ্যালগরিদম জড়িত থাকা সত্ত্বেও লোকেরা মানসিকভাবে ক্ষেত্র-বিভাজনকে একক ধারণা হিসাবে মডেল বলে মনে করছে।