[python] मैं कैसे जांचूं कि कोई सूची खाली है या नहीं?


Answers

ऐसा करने का पाइथोनिक तरीका पीईपी 8 स्टाइल गाइड से है (जहां हां का मतलब है "अनुशंसित" और इसका मतलब है "अनुशंसित नहीं"):

अनुक्रमों के लिए, (तार, सूचियां, tuples), इस तथ्य का उपयोग करें कि खाली अनुक्रम झूठे हैं।

Yes: if not seq:
     if seq:

No:  if len(seq):
     if not len(seq):
Question

उदाहरण के लिए, यदि निम्नलिखित पारित किया गया है:

a = []

मैं यह देखने के लिए कैसे जांच करूं कि a खाली है या नहीं?




एक और आसान तरीका हो सकता है

a = []
if len(a) == 0:
  print("Empty")
else:
  print(" Not empty")



बस is_empty () का उपयोग करें या फ़ंक्शन करें: -

def is_empty(any_structure):
    if any_structure:
        print('Structure is not empty.')
        return True
    else:
        print('Structure is empty.')
        return False  

इसका उपयोग किसी भी डेटा_स्ट्रक्चर जैसे सूची, टुपल्स, डिक्शनरी और कई अन्य के लिए किया जा सकता है। इनके द्वारा, आप इसे is_empty(any_structure) का उपयोग करके कई बार कॉल कर सकते हैं।




मैं निम्नलिखित पसंद करता हूं:

if a == []:
   print "The list is empty."

पढ़ने योग्य और आपको वैरिएबल के माध्यम से len() जैसे फ़ंक्शन को कॉल करने के बारे में चिंता करने की आवश्यकता नहीं है। हालांकि मुझे पूरी तरह से यकीन नहीं है कि इस तरह की किसी चीज का बिगो नोटेशन क्या है ... लेकिन पाइथन इतनी तेजस्वी है कि मुझे संदेह है कि इससे a फर्क नहीं पड़ता कि यह a विशाल था।




मैंने नीचे दिए गए पसंदीदा को देखा है:

if not a:
    print("The list is empty or null")



पाइथन इंटरैक्टिव टर्मिनल पर निष्पादित निम्न कोड देखें।

>>> a = []
>>> if a:
...     print "List is not empty";
... else:
...     print "List is empty"
... 
List is empty
>>> 
>>> a = [1, 4, 9]
>>> if a:
...     print "List is not empty";
... else:
...     print "List is empty"
... 
List is not empty
>>> 



पैट्रिक (स्वीकृत) उत्तर सही है: if not a: ऐसा करने का सही तरीका है। हार्ले होलकोबे का जवाब सही है कि यह पीईपी 8 स्टाइल गाइड में है। लेकिन किसी भी उत्तर में यह नहीं बताया गया है कि मुहावरे का पालन करना क्यों अच्छा विचार है-भले ही आपको व्यक्तिगत रूप से यह स्पष्ट न हो या रूबी उपयोगकर्ताओं या जो कुछ भी भ्रमित न हो।

पायथन कोड, और पायथन समुदाय, बहुत मजबूत मुहावरे है। उन मुहावरे के बाद पाइथन में अनुभवी किसी भी व्यक्ति के लिए आपके कोड को पढ़ने में आसान बनाता है। और जब आप उन मुहावरों का उल्लंघन करते हैं, तो यह एक मजबूत संकेत है।

यह सच है कि if not a: None खाली सूची, या संख्यात्मक 0, या खाली tuples, या खाली उपयोगकर्ता द्वारा बनाए गए संग्रह प्रकार, या खाली उपयोगकर्ता द्वारा निर्मित नहीं-संग्रहित प्रकार, या एकल तत्व NumPy सरणी से खाली सूचियों को अलग नहीं करता है झूठे मूल्यों के साथ स्केलर के रूप में कार्य करना, आदि। और कभी-कभी इसके बारे में स्पष्ट होना महत्वपूर्ण है। और उस स्थिति में, आप जानते हैं कि आप किस बारे में स्पष्ट होना चाहते हैं, ताकि आप इसके लिए परीक्षण कर सकें। उदाहरण के लिए, if not a and a is not None: इसका अर्थ है "किसी को छोड़कर कुछ भी झूठी नहीं", जबकि if len(a) != 0: अर्थ है "केवल खाली अनुक्रम- और अनुक्रम के अलावा कुछ भी एक त्रुटि है", और इसी तरह । आप जो परीक्षण करना चाहते हैं उसके लिए परीक्षण के अलावा, यह पाठक को भी संकेत देता है कि यह परीक्षण महत्वपूर्ण है।

लेकिन जब आपके पास स्पष्ट होने के लिए कुछ भी नहीं है, तो इसके अलावा कुछ भी if not a: पाठक को गुमराह कर रहा है। जब आप ऐसा नहीं करते हैं तो आप कुछ महत्वपूर्ण संकेत दे रहे हैं। (आप कोड को कम लचीला, या धीमा, या जो कुछ भी बना सकते हैं, लेकिन यह सब कम महत्वपूर्ण है।) और यदि आप इस तरह के पाठक को आदत से गुमराह करते हैं, तो जब आपको भेद करने की आवश्यकता होती है, तो यह ध्यान नहीं दिया जा रहा है क्योंकि आप अपने कोड पर "रोना भेड़िया" रहे हैं।




अन्य लोग सिर्फ सूचियों से परे प्रश्न को सामान्यीकृत कर रहे हैं, इसलिए मैंने सोचा कि मैं एक अलग प्रकार के अनुक्रम के लिए एक चेतावनी जोड़ूंगा जिसमें बहुत से लोग उपयोग कर सकते हैं, खासकर जब से यह "पायथन परीक्षण खाली सरणी" के लिए पहला Google हिट है ।

अन्य विधियां numpy arrays के लिए काम नहीं करते हैं

आपको numpy arrays से सावधान रहना होगा, क्योंकि list या अन्य मानक कंटेनर के लिए ठीक काम करने वाली अन्य विधियां numpy arrays के लिए विफल होती हैं। मैं नीचे क्यों समझाता हूं, लेकिन संक्षेप में, पसंदीदा विधि size का उपयोग करना size

"पायथनिक" तरीका काम नहीं करता है: भाग 1

"पायथनिक" रास्ता numpy arrays के साथ विफल रहता है क्योंकि numpy सरणी को bool एस की सरणी में डालने का प्रयास करता है, और if x किसी भी प्रकार के कुल सत्य मूल्य के लिए उन सभी बूलों का मूल्यांकन करने का प्रयास करता है। लेकिन इससे कोई मतलब नहीं आता है, इसलिए आपको ValueError मिलता है:

>>> x = numpy.array([0,1])
>>> if x: print("x")
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

"पायथनिक" तरीका काम नहीं करता है: भाग 2

लेकिन कम से कम मामला आपको बताता है कि यह असफल रहा। यदि आपके पास बिल्कुल एक तत्व के साथ एक numpy सरणी होती है, तो if कथन आपको "काम" करेगा, इस अर्थ में कि आपको कोई त्रुटि नहीं मिलती है। हालांकि, अगर वह तत्व 0 (या 0.0 , या false , ...) होता है, तो if कथन गलत तरीके से गलत होगा:

>>> x = numpy.array([0,])
>>> if x: print("x")
... else: print("No x")
No x

लेकिन स्पष्ट रूप से x मौजूद है और खाली नहीं है! यह परिणाम वह नहीं है जो आप चाहते थे।

len का उपयोग अप्रत्याशित परिणाम दे सकते हैं

उदाहरण के लिए,

len( numpy.zeros((1,0)) )

1 देता है, भले ही सरणी में शून्य तत्व हों।

Numpythonic रास्ता

जैसा कि एससीआई एफएक्यू में बताया गया है, सभी मामलों में सही विधि जहां आप जानते हैं कि आपके पास एक numpy सरणी है x.size का उपयोग if x.size :

>>> x = numpy.array([0,1])
>>> if x.size: print("x")
x

>>> x = numpy.array([0,])
>>> if x.size: print("x")
... else: print("No x")
x

>>> x = numpy.zeros((1,0))
>>> if x.size: print("x")
... else: print("No x")
No x

यदि आप सुनिश्चित नहीं हैं कि यह एक list हो सकता है, एक numpy सरणी, या कुछ और, आप इस दृष्टिकोण को उत्तर के साथ जोड़ सकते हैं @ dubiousjim यह सुनिश्चित करने के लिए देता है कि प्रत्येक प्रकार के लिए सही परीक्षण का उपयोग किया जाता है। बहुत "पायथनिक" नहीं है, लेकिन यह पता चला है कि कम से कम इस अर्थ में जानबूझकर पाइथोनिसिटी टूट गई है।

यदि आपको केवल यह जांचने के अलावा अधिक करने की आवश्यकता है कि इनपुट खाली है या नहीं, और आप इंडेक्सिंग या गणित संचालन जैसी अन्य numpy सुविधाओं का उपयोग कर रहे हैं, तो इनपुट को मजबूती देने के लिए यह अधिक कुशल (और निश्चित रूप से अधिक आम) है। इसे जल्दी करने के लिए कुछ अच्छे काम हैं - सबसे महत्वपूर्ण रूप से numpy.asarray । यह आपके इनपुट को लेता है, अगर यह पहले से ही एक सरणी है, तो कुछ भी नहीं करता है, या यदि कोई सूची, dtype इत्यादि है तो आपके इनपुट को सरणी में लपेटता है, और वैकल्पिक रूप से इसे आपके चुने हुए dtype परिवर्तित करता है। तो जब भी यह हो सकता है, यह बहुत तेज़ है, और यह सुनिश्चित करता है कि आपको लगता है कि इनपुट एक numpy सरणी है। हम आमतौर पर एक ही नाम का उपयोग करते हैं, क्योंकि एक सरणी में रूपांतरण इसे वर्तमान scope बाहर नहीं कर देगा:

x = numpy.asarray(x, dtype=numpy.double)

यह इस पृष्ठ पर देखे गए सभी मामलों में x.size जांच कार्य करेगा।




यहां कुछ तरीकों से आप जांच सकते हैं कि कोई सूची खाली है या नहीं:

a = [] #the list

1) सुंदर सरल पायथनिक तरीका:

if not a:
    print("a is empty")

पायथन में, रिक्त कंटेनर जैसे सूचियां, टुपल्स, सेट, डिकट्स, वैरिएबल इत्यादि को False रूप में देखा जाता है। कोई भी सूची को भविष्यवाणी के रूप में देख सकता है ( एक बूलियन मान लौटा रहा है )। और एक True मूल्य इंगित करेगा कि यह खाली नहीं है।

2) एक बहुत स्पष्ट तरीका: लंबाई खोजने के लिए len() का उपयोग करके जांचें कि यह 0 बराबर है या नहीं:

if len(a) == 0:
    print("a is empty")

3) या इसे एक अज्ञात खाली सूची से तुलना करना:

if a == []:
    print("a is empty")

4) exception और iter() का उपयोग करने के लिए एक और अभी तक मूर्ख तरीका है:

try:
    next(iter(a))
    # list has elements
except StopIteration:
    print("Error: a is empty")






पाइथन खालीपन के इलाज के बारे में बहुत समान है। निम्नलिखित को देखते हुए:

a = []

.
.
.

if a:
   print("List is not empty.")
else:
   print("List is empty.")

आप बस "if" कथन के साथ सूची को चेक करने के लिए जांचें कि यह खाली है या नहीं। जो मैंने पढ़ा और पढ़ाया है, उससे यह देखने के लिए "पायथनिक" तरीका है कि कोई सूची या ट्यूपल खाली है या नहीं।




यदि आप जांचना चाहते हैं कि सूची खाली है या नहीं;

l = []
if l:
    # do your stuff.

यदि आप मौसम की जांच करना चाहते हैं तो सूची में सभी मूल्य खाली हैं।

l = ["", False, 0, '', [], {}, ()]
if all(bool(x) for x in l):
    # do your stuff.

हालांकि यह खाली सूची के लिए सच होगा।

def empty_list(lst):
    if len(lst) ==0:
        return false
    else:
        return all(bool(x) for x in l)

अब आप इसका उपयोग कर सकते हैं:

if empty_list(lst):
    # do your stuff.



Links



Tags

python python   list