1) প্রায় ইংরেজি শৈলী:
in
অপারেটরটি ব্যবহার করে উপস্থিতির জন্য পরীক্ষা করুন , তারপরে remove
পদ্ধতিটি প্রয়োগ করুন ।
if thing in some_list: some_list.remove(thing)
remove
পদ্ধতি শুধুমাত্র প্রথম সংঘটন সরাবে thing
, সমস্ত ঘটনার আপনি ব্যবহার করতে পারেন পরিষ্কার করার জন্য while
পরিবর্তে if
।
while thing in some_list: some_list.remove(thing)
- যথেষ্ট সহজ, সম্ভবত আমার পছন্দ small ছোট তালিকার জন্য (এক-রেখার প্রতিরোধ করতে পারে না)
এই অঙ্কুর-প্রথম-জিজ্ঞাসা-শেষ মনোভাব পাইথন মধ্যে সাধারণ। বস্তুটি উপযুক্ত হলে আগাম পরীক্ষার পরিবর্তে কেবল অপারেশন চালিয়ে প্রাসঙ্গিক ব্যতিক্রমগুলি ধর:
try:
some_list.remove(thing)
except ValueError:
pass # or scream: thing not in some_list!
except AttributeError:
call_security("some_list not quacking like a list!")
অবশ্যই উদাহরণস্বরূপ দ্বিতীয়টি ধারা বাদে দ্বিতীয়টি কেবল সন্দেহজনক হাস্যরসই নয় তবে সম্পূর্ণ অপ্রয়োজনীয় (বিন্দুটি ধারণাটির সাথে পরিচিত না এমন লোকদের জন্য হাঁস-টাইপিংয়ের চিত্র তুলে ধরেছিল)।
যদি আপনি জিনিসটির একাধিক ঘটনা আশা করেন:
while True:
try:
some_list.remove(thing)
except ValueError:
break
- এই সুনির্দিষ্ট ব্যবহারের ক্ষেত্রে কিছুটা ভার্বোজ, তবে পাইথনে খুব মূর্তিমান।
- এটি # 1 এর চেয়ে ভাল পারফর্ম করে
- পিইপি 463 চেষ্টা করার জন্য / এখানে সহজ ব্যবহারযোগ্য যা সাধারণ ব্যবহার ব্যতীত একটি সংক্ষিপ্ত বাক্য গঠন প্রস্তাব করেছিল, কিন্তু এটি অনুমোদিত হয়নি।
তবে কনটেক্সলিবের দমন () প্রসঙ্গের ব্যবস্থাপনার (পাইথন ৩.৪ এ প্রবর্তিত) উপরের কোডটি এটিকে সহজতর করা যেতে পারে:
with suppress(ValueError, AttributeError):
some_list.remove(thing)
আবার, যদি আপনি জিনিসটির একাধিক ঘটনা আশা করেন:
with suppress(ValueError):
while True:
some_list.remove(thing)
3) কার্যকরী শৈলী:
প্রায় 1993, পাইথন পেয়েছিলাম lambda
, reduce()
, filter()
এবং map()
, একটি সৌজন্যে পাতার মর্মর হ্যাকার যারা তাদের মিস এবং পেশ কাজ প্যাচ *। আপনি filter
তালিকা থেকে উপাদানগুলি সরাতে ব্যবহার করতে পারেন:
is_not_thing = lambda x: x is not thing
cleaned_list = filter(is_not_thing, some_list)
সেখানে একটি শর্টকাট আপনার ক্ষেত্রে জন্য উপযোগী হতে পারে: আপনি খালি আইটেম ফিল্টার করার জন্য (আসলে আইটেম যেখানে চান bool(item) == False
, মত None
, শূন্য, খালি স্ট্রিং বা অন্যান্য খালি সংগ্রহ), আপনি কোনটি প্রথম আর্গুমেন্ট হিসাবে পাস করতে পারেন:
cleaned_list = filter(None, some_list)
- [আপডেট] : পাইথন ২.x এ, (বা যদি প্রথম যুক্তিটি হয় ) এর
filter(function, iterable)
সমতুল্য ব্যবহৃত হত ; পাইথন ৩.x এ এটি এখন সমান । সূক্ষ্ম পার্থক্য হ'ল ফিল্টারটি কোনও তালিকা ফেরত দেওয়ার জন্য ব্যবহৃত হত, এখন এটি জেনারেটর এক্সপ্রেশনের মতো কাজ করে - এটি যদি ঠিক থাকে তবে আপনি যদি কেবল পরিষ্কার তালিকাটি নিয়ে পুনরাবৃত্তি করছেন এবং এটি ত্যাগ করছেন তবে আপনার যদি সত্যিই একটি তালিকা প্রয়োজন হয় তবে আপনাকে কলটি বন্ধ করতে হবে কনস্ট্রাক্টরের সাথে[item for item in iterable if function(item)]
[item for item in iterable if item]
None
(item for item in iterable if function(item))
filter()
list()
- * এই লিস্পি স্বাদযুক্ত নির্মাণগুলি পাইথনে কিছুটা এলিয়েন হিসাবে বিবেচনা করা হয়। ২০০৫ সালের দিকে, গাইডো এমনকি
filter
নামার কথা বলছিলেন - সহচরদের সাথে map
এবং reduce
(তারা এখনও যায় নি তবে ফান্টুলস মডিউলে reduce
স্থানান্তরিত হয়েছিল, এটি যদি আপনি উচ্চ অর্ডার ফাংশন পছন্দ করেন তবে এক নজরে মূল্যবান )।
4) গাণিতিক শৈলী:
পিইপি 202 দ্বারা 2.0 সংস্করণে প্রবর্তিত হওয়ার পরে পাইথনে লিস্ট ম্যানিপুলেশনের জন্য তালিকা বোধগম্য পছন্দসই স্টাইল হয়ে ওঠে । এটি পিছনে পিছনে যুক্তি হল এই তালিকা comprehensions পরিস্থিতিতে তালিকা তৈরি করতে যেখানে আরও সংক্ষিপ্ত পন্থা প্রদান হয় map()
এবং filter()
এবং / অথবা নেস্টেড loops বর্তমানে ব্যবহার করা হবে।
cleaned_list = [ x for x in some_list if x is not thing ]
জেনারেটর এক্সপ্রেশনগুলি পিইপি 289 দ্বারা 2.4 সংস্করণে প্রবর্তিত হয়েছিল । জেনারেটর এক্সপ্রেশন এমন পরিস্থিতিতে ভাল হয় যেখানে আপনার সত্যিকার প্রয়োজন নেই (বা চান) মেমোরিতে একটি পূর্ণ তালিকা তৈরি করা দরকার - যেমন আপনি যখন একবারে একবারে উপাদানগুলির উপর পুনরাবৃত্তি করতে চান। যদি আপনি কেবল তালিকার উপরেই পুনরাবৃত্তি করেন তবে আপনি জেনারেটর এক্সপ্রেশনটিকে অলস মূল্যায়িত তালিকা অনুধাবন হিসাবে ভাবতে পারেন :
for item in (x for x in some_list if x is not thing):
do_your_thing_with(item)
মন্তব্য
- আপনি তার
!=
পরিবর্তে অসমতা অপারেটরটি ব্যবহার করতে চাইতে পারেন is not
( পার্থক্যটি গুরুত্বপূর্ণ )
- তালিকার অনুলিপি প্রয়োগকারী পদ্ধতির সমালোচকদের জন্য: জনপ্রিয় বিশ্বাসের বিপরীতে, জেনারেটর এক্সপ্রেশনগুলি তালিকা বোধের চেয়ে সবসময় বেশি কার্যকর হয় না - অভিযোগ করার আগে দয়া করে প্রোফাইল দিন