আমার কোড রয়েছে যা দেখতে কিছুটা এমন দেখাচ্ছে:
thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)
ঠিক আছে তাই এটি সরলীকৃত তবে আপনি ধারণা পাবেন। এখন thingসম্ভবত তালিকায় নাও থাকতে পারে, সেক্ষেত্রে আমি -1 পাস করতে চাই thing_index। অন্যান্য ভাষায় এটি হ'ল আপনি index()যদি ফিরে আসার প্রত্যাশা করেন যদি এটি উপাদানটি খুঁজে না পায়। আসলে এটি নিক্ষেপ করে ValueError।
আমি এটি করতে পারি:
try:
thing_index = thing_list.index(thing)
except ValueError:
thing_index = -1
otherfunction(thing_list, thing_index)
তবে এটি নোংরা বোধ করে, ValueErrorঅন্য কোনও কারণে উত্থাপিত হতে পারে কিনা তা আমি জানি না । আমি জেনারেটর ফাংশনের উপর ভিত্তি করে নীচের সমাধানটি নিয়ে এসেছি তবে এটি কিছুটা জটিল বলে মনে হচ্ছে:
thing_index = ( [(i for i in xrange(len(thing_list)) if thing_list[i]==thing)] or [-1] )[0]
একই জিনিস অর্জন করার একটি ক্লিনার উপায় আছে? ধরে নেওয়া যাক তালিকাটি বাছাই করা হয়নি।
str.findপদ্ধতি রয়েছে যা হুবহু এটি করে: ফিরে আসে -1যখন সূচকে বিষয় পাওয়া যায় না।
str.index()অনুসন্ধানের স্ট্রিংটি পাওয়া না গেলে একটি ব্যতিক্রম ছুঁড়ে ফেলে।
thing_index।" - এটি অবশ্যই অ-পাইথোনিক। কোনও অপারেশন সফল না হওয়ার ক্ষেত্রে একটি (অর্থহীন) টোকেন মানটি সাফল্যজনক না হলে - ব্যতিক্রমগুলি এখানে সঠিক উপায়। বিশেষত যেহেতুthing_list[-1]একটি বৈধ এক্সপ্রেশন, যার অর্থ তালিকার শেষ এন্ট্রি।