তালিকাগুলির জন্য একটি সংক্ষিপ্ত বৈশিষ্ট্য রয়েছে?


514

আমি দেখতে পাচ্ছি যে লোকেরা anyএকটি তালিকায় কোনও আইটেম উপস্থিত রয়েছে কিনা তা দেখার জন্য অন্য তালিকা সংগ্রহ করতে ব্যবহার করছে, তবে কী ঠিক করার কোনও দ্রুত উপায় আছে ?:

if list.contains(myItem):
    # do something

আপনার প্রশ্নটি ইঙ্গিত দেয় আপনি কেবল তালিকায় আগ্রহী আইটেম রয়েছে , তালিকায় সাবলিস্ট নেই? / টিপল / সেট / ফ্রোজেনसेट / ...?
স্মি

উত্তর:


873

আপনি এই বাক্য গঠনটি ব্যবহার করতে পারেন:

if myItem in list:
    # do something

এছাড়াও, বিপরীত অপারেটর:

if myItem not in list:
    # do something

তালিকা, টিপলস, সেট এবং ডিক্টস (চেক কী) এর জন্য এটি দুর্দান্ত কাজ করেছে fine

লক্ষ করুন যে এটি তালিকা এবং টিপলসগুলিতে একটি ও (এন) অপারেশন, তবে সেট এবং ডিক্টসে একটি ও (1) অপারেশন।


1
নম্পি অ্যারে সমন্বিত একটি তালিকা সহ, এই নালীর উদাহরণগুলির জন্য বা নমির উদাহরণগুলির মধ্যে মানগুলি পরীক্ষা করবে?
ড্যানিয়েল মুলার

সাবধান! এটি সম্ভবত আপনি প্রত্যাশা করেননি এমনটি হ'ল:o='--skip'; o in ("--skip-ias"); # returns True !
অ্যালেক্স এফ

3
@ অ্যালেক্সএফ: এটি মেলে কারণ ("--skip-ias")একটি টিপল নয়, তবে একটি স্ট্রিং (প্রথম বন্ধনী (1)যেমন প্যারেন্যাসিসগুলি কিছুই করে না )। আপনি যদি 1-টিপল চান, আপনার একক আইটেমের পরে কমা যুক্ত করতে হবে: ("--skip-ias",)(বা (1,))।
ব্ল্যাককিংস্ট

মনে রাখবেন যে আপনি যদি অক্ষরগুলির সাথে তুলনা করেন তবে এটি ক্ষেত্রে সংবেদনশীল।
টিলসন

65

অন্যেরা যা বলেছে তা ছাড়াও, আপনি জানতে আগ্রহী হতে পারেন যে পদ্ধতিটি কী বলা inহয় list.__contains__, আপনি যে কোনও শ্রেণীর লেখার জন্য তার সংজ্ঞা দিতে পারেন এবং অজগরটি তার পুরোপুরি ব্যবহারে অত্যন্ত কার্যকর হতে পারেন।  

বোবা ব্যবহার হতে পারে:

>>> class ContainsEverything:
    def __init__(self):
        return None
    def __contains__(self, *elem, **k):
        return True


>>> a = ContainsEverything()
>>> 3 in a
True
>>> a in a
True
>>> False in a
True
>>> False not in a
False
>>>         

5

Trueতালিকায় কোনও আইটেমের সংখ্যক ঘটনা উপস্থিত Falseরয়েছে বা এটিতে কোনও ঘটনা বা কিছু না থাকলে তা পাওয়ার জন্য আমি সম্প্রতি এই এক লাইনারের সাথে এসেছি । ব্যবহার করা next(...)এটি একটি ডিফল্ট রিটার্ন মান দেয় ( False) এবং এর অর্থ এটি পুরো তালিকা বোধগম্যতা চালানোর চেয়ে উল্লেখযোগ্যভাবে দ্রুত চালানো উচিত।

list_does_contain = next((True for item in list_to_test if item == test_item), False)


আমার ক্ষেত্রে আমার কাছে বিভাগ নামে পরিচিত বস্তুর একটি তালিকা রয়েছে এবং এটি কেবলমাত্র সম্পত্তি লিংকের জন্য পরীক্ষা করা প্রয়োজন, সুতরাং এই সমাধানগুলি আমার ক্ষেত্রে আরও ভাল ফিট করে। ধন্যবাদ
রডরিগর্ফ

3
any(item == test_item for item in list_to_test)আমি কি মনে করি?
কেউ

3

আইটেমটি উপস্থিত না থাকলে তালিকার পদ্ধতিটি indexফিরে আসবে -1এবং উপস্থিত উপস্থিত থাকলে তালিকার আইটেমের সূচি ফিরিয়ে দেবে। বিকল্পভাবে একটি ifবিবৃতিতে আপনি নিম্নলিখিতটি করতে পারেন:

if myItem in list:
    #do things

নীচের বিবৃতি সহ কোনও উপাদান তালিকাতে নেই কিনা তা আপনিও পরীক্ষা করতে পারেন:

if myItem not in list:
    #do things

15
indexপদ্ধতি ফেরত দেয় না -1 যদি উপাদান উপস্থিত নেই, এটি একটি ছোঁড়ার ValueErrorব্যতিক্রম।
মন্ডকিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.