पायथन सिंटैक्स के लिए "यदि एक या बी या सी लेकिन उन सभी को नहीं"


130

मेरे पास एक पायथन स्क्रिप्ट है जो शून्य या तीन कमांड लाइन तर्क प्राप्त कर सकती है। (या तो यह डिफ़ॉल्ट व्यवहार पर चलता है या निर्दिष्ट तीनों मानों की आवश्यकता है)

कुछ के लिए आदर्श वाक्यविन्यास क्या है:

if a and (not b or not c) or b and (not a or not c) or c and (not b or not a):

?


4
शायद कुछ के साथ शुरू हो सकता है जैसे `अगर लेन (sys.argv) == 0:
एडगर अरौटियूनियन

6
@EdgarAroutiounian len(sys.argv)हमेशा कम से कम 1 होगा: इसमें निष्पादन योग्य शामिल है argv[0]
रोडीइच

10
प्रश्न का मुख्य भाग प्रश्न के शीर्षक से मेल नहीं खाता है। क्या आप "यदि a या b या c, लेकिन उन सभी को नहीं" या "if a, b, and c" में से एक की जाँच करना चाहते हैं (जैसा कि आपने दिया अभिव्यक्ति है)?
डग मैकक्लीन

2
आप + b + c के बारे में क्या कह सकते हैं?
गुफॉफ़

6
रुको, सवाल करो, यह शून्य या तीन तर्क ले सकता है। क्या आप बस if not (a and b and c)(शून्य आर्ग) नहीं कह सकते थे , और फिर if a and b and c(तीनों आर्ग)?
अनुचर

जवाबों:


236

यदि आपका मतलब न्यूनतम रूप से है, तो इसके साथ जाएं:

if (not a or not b or not c) and (a or b or c):

जो आपके प्रश्न के शीर्षक का अनुवाद करता है।

अद्यतन: जैसा कि सही रूप से अस्थिरता और Supr द्वारा कहा गया है, आप डी मॉर्गन के कानून को लागू कर सकते हैं और समकक्ष प्राप्त कर सकते हैं:

if (a or b or c) and not (a and b and c):

मेरी सलाह है कि जो भी आपके लिए और अन्य प्रोग्रामर के लिए महत्वपूर्ण है, उसका उपयोग करें। पहला अर्थ है "कुछ गलत है, लेकिन कुछ सच भी है" , दूसरा "कुछ सच नहीं है, लेकिन सब कुछ नहीं है" । यदि मुझे हार्डवेयर में इसे ऑप्टिमाइज़ करना या करना होता है, तो मैं दूसरा चुनूंगा, यहाँ सिर्फ सबसे पठनीय (साथ ही उन परिस्थितियों को ध्यान में रखते हुए जिन्हें आप परीक्षण कर रहे हैं और उनके नाम भी लेंगे) चुनेंगे। मैंने पहले उठाया।


3
सभी महान जवाब, लेकिन यह संक्षिप्तता के लिए जीतता है, बहुत कम परिचलन के साथ। सबको शुक्रीया!
क्रिस विल्सन

38
मैं तो यह और भी अधिक संक्षिप्त बनाने के लिए और साथ जाना चाहते हैंif not (a and b and c) and (a or b or c)
अस्थिरता

208
या यहां तक कि if (a or b or c) and not (a and b and c)); पूरी तरह से शीर्षक मैच के लिए
supr

3
@ हेनीह मेरा मानना ​​है कि प्रश्न "कम से कम एक शर्त सही है लेकिन सभी नहीं" के लिए पूछता है, "केवल एक शर्त सच" नहीं।
वाष्पशीलता

63
@ सुश्रुतif any([a,b,c]) and not all([a,b,c])
शाश्वत

238

कैसा रहेगा:

conditions = [a, b, c]
if any(conditions) and not all(conditions):
   ...

अन्य प्रकार:

if 1 <= sum(map(bool, conditions)) <= 2:
   ...

2
sum(conditions)गलत हो सकता है अगर उनमें से कोई भी 2उदाहरण के लिए लौटता है, जो है True
यूमरियो

7
यह सच है कि आपको एक बदसूरतsum(map(bool, conditions))
जमीलाक

5
ध्यान दें कि यह छोटा-चक्कर नहीं है, क्योंकि सभी परिस्थितियों का पूर्व-मूल्यांकन किया जाता है।
जॉर्ज

14
@PaulScheltema पहला रूप किसी के लिए अधिक समझने योग्य है।
शाम

6
यह "किसी भी और सभी" सबसे अच्छा और बूलियन तरीकों में से सबसे साफ, सिर्फ एक आर्ग वर्तमान और एक आर्ग जा रहा है 'truthy' होने के बीच महत्वपूर्ण अंतर के प्रति जागरूक होना है
विम

115

इस सवाल के पहले से ही कई उच्च उत्कीर्ण उत्तर और एक स्वीकृत उत्तर था, लेकिन उनमें से सभी अब तक बूलियन समस्या को व्यक्त करने के विभिन्न तरीकों से विचलित थे और एक महत्वपूर्ण बिंदु से चूक गए थे:

मेरे पास एक पायथन स्क्रिप्ट है जो शून्य या तीन कमांड लाइन तर्क प्राप्त कर सकती है। (या तो यह डिफ़ॉल्ट व्यवहार पर चलता है या निर्दिष्ट तीनों मानों की आवश्यकता है)

यह तर्क पहली जगह में आपके कोड की जिम्मेदारी नहीं होनी चाहिए , बल्कि इसेargparseमॉड्यूलद्वारा नियंत्रित किया जाना चाहिए। यदि कथन को एक जटिल लिखने में परेशान न करें, इसके बजाय अपने तर्क पार्सर को कुछ इस तरह सेट करना पसंद करें:

#!/usr/bin/env python
import argparse as ap
parser = ap.ArgumentParser()
parser.add_argument('--foo', nargs=3, default=['x', 'y', 'z'])
args = parser.parse_args()
print(args.foo)

और हाँ, यह एक विकल्प होना चाहिए न कि एक तर्कपूर्ण तर्क, क्योंकि यह सभी वैकल्पिक के बाद है ।


संपादित: टिप्पणियों में लार्स की चिंता का समाधान करने के लिए, नीचे एक उदाहरण है कि आप इसे कैसे लिख सकते हैं यदि आप निश्चित थे कि आप इंटरफ़ेस को 3 या 0 स्थितीय आर्गन्स केसाथ चाहते थे। मेरा विचार है कि पिछला इंटरफ़ेस बेहतर शैली है, क्योंकि वैकल्पिक तर्क विकल्प होने चाहिए, लेकिन यहां पूर्णता के लिए एक वैकल्पिक दृष्टिकोण है। usageअपने पार्सर का निर्माण करते समयओवरराइडिंग कंवर पर ध्यान दें, क्योंकिargparseअन्यथा एक भ्रामक उपयोग संदेश उत्पन्न होगा!

#!/usr/bin/env python
import argparse as ap
parser = ap.ArgumentParser(usage='%(prog)s [-h] [a b c]\n')
parser.add_argument('abc', nargs='*', help='specify 3 or 0 items', default=['x', 'y', 'z'])
args = parser.parse_args()
if len(args.abc) != 3:
  parser.error('expected 3 arguments')
print(args.abc)

यहाँ कुछ उपयोग उदाहरण हैं:

# default case
wim@wim-zenbook:/tmp$ ./three_or_none.py 
['x', 'y', 'z']

# explicit case
wim@wim-zenbook:/tmp$ ./three_or_none.py 1 2 3
['1', '2', '3']

# example failure mode
wim@wim-zenbook:/tmp$ ./three_or_none.py 1 2 
usage: three_or_none.py [-h] [a b c]
three_or_none.py: error: expected 3 arguments

4
हां, मैंने इसे जानबूझकर जोड़ा है। यह तर्क को स्थितिपूर्ण बनाना संभव होगा, और यह लागू करेगा कि वास्तव में 3 या 0 का उपभोग किया जाता है, लेकिन यह एक अच्छा सीएलआई नहीं बनायेगा इसलिए मैंने इसकी सिफारिश नहीं की है।
विम

8
अलग मुद्दा। आपको विश्वास नहीं है कि यह अच्छा सीएलआई है, और आप उस बिंदु के लिए बहस कर सकते हैं, और ओपी को राजी किया जा सकता है। लेकिन आपका उत्तर प्रश्न से काफी विचलित कर देता है कि कल्पना के परिवर्तन का उल्लेख किया जाना चाहिए। आप परिवर्तन का उल्लेख किए बिना, उपलब्ध टूल को फिट करने के लिए कल्पना को झुकाते हुए प्रतीत होते हैं।
लार्स

2
@ लार्स ओके, मैंने एक उदाहरण जोड़ा है जो प्रश्न में निहित मूल इंटरफ़ेस के साथ बेहतर बैठता है। ); अब यह उपलब्ध कल्पना को पूरा करने के उपकरण झुकने है ...
विम

2
यह एकमात्र उत्तर है जिसे मैंने उखाड़ा है। असली सवाल का जवाब देने के लिए +1 ।
जोनाथन रेनहार्ट

1
+1। सीएलआई का रूप एक महत्वपूर्ण स्पर्शरेखा मुद्दा है, जो किसी अन्य व्यक्ति ने कहा कि पूरी तरह से अलग नहीं है। मैंने आपकी पोस्ट के साथ-साथ दूसरों को भी उकसाया - आपकी समस्या की जड़ में है और एक सुरुचिपूर्ण समाधान प्रस्तुत करता है, जबकि अन्य पोस्ट साहित्यिक प्रश्न का उत्तर देते हैं। और दोनों प्रकार के उत्तर उपयोगी हैं और +1 के लायक हैं।
बेन ली

32

मैं इसके लिए जाऊंगा:

conds = iter([a, b, c])
if any(conds) and not any(conds):
    # okay...

मुझे लगता है कि यह शॉर्ट-सर्किट काफी कुशलता से होना चाहिए

व्याख्या

condsएक इटरेटर बनाने से , anyविल शॉर्ट सर्किट का पहला उपयोग होता है और किसी भी वस्तु के सही होने पर अगले एलीमेंट की ओर इशारा करते हुए इटरेटर को छोड़ देता है; अन्यथा, यह पूरी सूची का उपभोग करेगा और होगा False। अगला anyपुनरावृत्त में शेष वस्तुओं को लेता है, और यह सुनिश्चित करता है कि कोई अन्य सही मूल्य नहीं हैं ... यदि हैं, तो पूरा कथन सत्य नहीं हो सकता है, इस प्रकार एक अद्वितीय तत्व नहीं है (इसलिए शॉर्ट सर्किट फिर)। आखिरी anyया तो वापस आ जाएगा या Falseचलने योग्य और समाप्त हो जाएगा True

नोट: उपरोक्त जाँच यदि केवल एक ही शर्त निर्धारित है


यदि आप जांचना चाहते हैं कि एक या अधिक आइटम नहीं, बल्कि प्रत्येक आइटम सेट है, तो आप उपयोग कर सकते हैं:

not all(conds) and any(conds)

5
मुझे नहीं मिला। यह इस तरह पढ़ता है: अगर सच है और सच नहीं है। मुझे समझने में मदद करें।
rGil

1
@rGil: यह पढ़ता है "अगर कुछ सेब लाल हैं, और कुछ नहीं हैं" - यह कहने के समान है कि "कुछ सेब लाल हैं, लेकिन उन सभी में नहीं"।
जॉर्ज

2
स्पष्टीकरण के साथ भी मैं व्यवहार को नहीं समझ सकता ... [a, b, c] = [True, True, False]क्या आपका कोड "प्रिंट" नहीं होना चाहिए False, जबकि अपेक्षित आउटपुट है True?
awesoon

6
यह बहुत चालाक है, लेकिन: यदि आप अप-फ्रंट में कितनी स्थितियां जानते हैं, तो आप इस दृष्टिकोण का उपयोग करेंगे, लेकिन सशर्त की एक निश्चित, ज्ञात सूची के लिए, पठनीयता का नुकसान बस इसके लायक नहीं है।
शराबी

4
यह शॉर्ट-सर्किट नहीं है। पास होने से पहले सूची पूरी तरह से बनाई गई है iteranyऔर allआलसी सूची का उपभोग करेगा, सच है, लेकिन सूची पहले से ही पूरी तरह से मूल्यांकन की गई थी जब तक आप वहां पहुंच जाते हैं!
icktoofay

22

अंग्रेजी वाक्य:

"अगर एक या बी या सी लेकिन उनमें से सभी नहीं"

इस तर्क का अनुवाद:

(a or b or c) and not (a and b and c)

शब्द "लेकिन" आमतौर पर एक संयोजन का अर्थ है, दूसरे शब्दों में "और"। इसके अलावा, "उन सभी को" शर्तों के एक संयोजन में अनुवाद करता है: यह स्थिति, और वह स्थिति, और अन्य स्थिति। "नहीं" पूरे संयोजन को विचलित करता है।

मैं इस बात से सहमत नहीं हूं कि स्वीकृत उत्तर। लेखक ने विनिर्देश के लिए सबसे सरल व्याख्या को लागू करने के लिए उपेक्षित किया, और कम ऑपरेटरों को अभिव्यक्ति को सरल बनाने के लिए डी मॉर्गन के कानून को लागू करने के लिए उपेक्षित किया:

 not a or not b or not c  ->  not (a and b and c)

दावा करते हुए कि उत्तर एक "न्यूनतम रूप" है।


दरअसल, वह फॉर्म न्यूनतम है। यह अभिव्यक्ति के लिए न्यूनतम PoS फॉर्म है
स्टेफानो सैनफिलिपो

10

यह रिटर्न Trueअगर एक और केवल तीन शर्तों में से एक है True। संभवतः आप अपने उदाहरण कोड में क्या चाहते थे।

if sum(1 for x in (a,b,c) if x) == 1:

@Defuz द्वारा जवाब के रूप में के रूप में सुंदर नहीं
jamylak

10

के बारे में क्या: (अद्वितीय स्थिति)

if (bool(a) + bool(b) + bool(c) == 1):

ध्यान दें, यदि आप दो शर्तों की अनुमति देते हैं तो आप ऐसा कर सकते हैं

if (bool(a) + bool(b) + bool(c) in [1,2]):

1
रिकॉर्ड के लिए, सवाल दो स्थितियों के लिए पूछता है। कम से कम एक, लेकिन उनमें से सभी = सभी में से 1 या सभी में से 2
मैरियस बाल्किटिस

IMHO के रूप में आप दूसरा एक जादू करना चाहिए 1 <= bool(a) + bool(b) + bool(c) <= 2
मोनिका

6

स्पष्ट होने के लिए, आप अपना निर्णय इस आधार पर लेना चाहते हैं कि कितने पैरामीटर तार्किक TRUE हैं (कड़े तर्कों के मामले में - खाली नहीं हैं)?

argsne = (1 if a else 0) + (1 if b else 0) + (1 if c else 0)

फिर आपने एक निर्णय लिया:

if ( 0 < argsne < 3 ):
 doSth() 

अब तर्क अधिक स्पष्ट है।


5

और सिर्फ उन्हें क्यों नहीं गिना जाए?

import sys
a = sys.argv
if len(a) = 1 :  
    # No arguments were given, the program name count as one
elif len(a) = 4 :
    # Three arguments were given
else :
    # another amount of arguments was given

5

यदि आप थोड़ा सा गुप्त होने का बुरा नहीं मानते 0 < (a + b + c) < 3हैं, trueतो आप एक साथ दो या दो सही कथन और झूठे होने पर वापस लौट सकते हैं, यदि सभी झूठे हैं या कोई भी गलत नहीं है।

यह भी सरल करता है यदि आप बूल का मूल्यांकन करने के लिए फ़ंक्शन का उपयोग करते हैं क्योंकि आप केवल एक बार चर का मूल्यांकन करते हैं और जिसका अर्थ है कि आप फ़ंक्शन को इनलाइन लिख सकते हैं और चर को अस्थायी रूप से संग्रहीत करने की आवश्यकता नहीं है। (उदाहरण: 0 < ( a(x) + b(x) + c(x) ) < 3।)


4

प्रश्न में कहा गया है कि आपको सभी तीन तर्कों (ए और बी और सी) या उनमें से कोई भी नहीं चाहिए (नहीं (या बी या सी))

यह देता है:

(ए और बी और सी) या नहीं (एक या बी या सी)


4

जैसा कि मैं इसे समझता हूं, आपके पास एक फ़ंक्शन है जो 3 तर्क प्राप्त करता है, लेकिन अगर ऐसा नहीं होता है तो यह डिफ़ॉल्ट व्यवहार पर चलेगा। चूँकि आपने यह नहीं बताया है कि क्या होना चाहिए जब 1 या 2 तर्क दिए जाते हैं तो मुझे लगता है कि यह केवल डिफ़ॉल्ट व्यवहार करना चाहिए। किस मामले में, मुझे लगता है कि आपको निम्नलिखित उत्तर बहुत फायदेमंद लगेगा:

def method(a=None, b=None, c=None):
    if all([a, b, c]):
        # received 3 arguments
    else:
        # default behavior

हालाँकि, यदि आप 1 या 2 तर्क अलग तरीके से संभालना चाहते हैं:

def method(a=None, b=None, c=None):
    args = [a, b, c]
    if all(args):
        # received 3 arguments
    elif not any(args):
        # default behavior
    else:
        # some args (raise exception?)

नोट: यह मानता है कि " False" मान इस विधि में पारित नहीं किया जाएगा।


एक तर्क की सच्चाई यह मान देखना हो एक तर्क उपस्थित या अनुपस्थित है से अलग बात है
विम

@wim तो आपके उत्तर के अनुरूप प्रश्न को परिवर्तित कर रहा है। प्रश्न के साथ argparse मॉड्यूल का कोई लेना देना नहीं है, यह एक और आयात जोड़ता है, और यदि ओपी बिल्कुल भी argparse का उपयोग करने की योजना नहीं बना रहा है, तो यह उनकी मदद नहीं करेगा कि क्या-कभी-कभी। इसके अलावा, यदि "स्क्रिप्ट" स्टैंडअलोन नहीं है, लेकिन एक मॉड्यूल, या कोड के एक बड़े सेट के भीतर एक फ़ंक्शन है, तो इसमें पहले से ही एक तर्क पार्सर हो सकता है, और उस बड़े स्क्रिप्ट के भीतर यह विशेष फ़ंक्शन डिफ़ॉल्ट या अनुकूलित हो सकता है। ओपी से सीमित जानकारी के कारण, मुझे नहीं पता है कि विधि को कैसे कार्य करना चाहिए, लेकिन यह मान लेना सुरक्षित है कि ओपी पास नहीं कर रहा है।
इबर रोज

प्रश्न ने स्पष्ट रूप से कहा "मेरे पास एक पायथन स्क्रिप्ट है जो शून्य या तीन कमांड लाइन तर्क प्राप्त कर सकती है", यह नहीं कहा कि "मेरे पास एक फ़ंक्शन है जो 3 तर्क प्राप्त करता है"। चूंकि अजगर में कमांड लाइन के तर्कों को संभालने का एक पसंदीदा तरीका है, यह स्वचालित रूप से प्रश्न के साथ करने के लिए सब कुछ है। अंत में, अजगर "बैटरी शामिल है" - जब कोई मॉड्यूल मानक पुस्तकालयों का हिस्सा होता है, तो "किसी अन्य आयात को जोड़ने" के साथ कोई नकारात्मक पहलू नहीं होता है।
विम

@ यह प्रश्न काफी अस्पष्ट है (उदाहरण के लिए, शरीर शीर्षक से मेल नहीं खाता)। मुझे लगता है कि प्रश्न स्पष्ट नहीं पर्याप्त है कि इस के लिए मान्य उत्तर है कुछ इसके बारे में व्याख्या।
मोनिका

2

यदि आप परिस्थितियों के पुनरावृत्ति के साथ काम करते हैं, तो यह उपयोग करने के लिए धीमा हो सकता है। लेकिन आपको प्रत्येक तत्व को एक से अधिक बार एक्सेस करने की आवश्यकता नहीं है, और आपको हमेशा यह सब पढ़ने की आवश्यकता नहीं है। यहाँ एक समाधान है जो अनंत जनरेटर के साथ काम करेगा:

#!/usr/bin/env python3
from random import randint
from itertools import tee

def generate_random():
    while True:
        yield bool(randint(0,1))

def any_but_not_all2(s): # elegant
    t1, t2 = tee(s)
    return False in t1 and True in t2 # could also use "not all(...) and any(...)"

def any_but_not_all(s): # simple
    hadFalse = False
    hadTrue = False
    for i in s:
        if i:
            hadTrue = True
        else:
            hadFalse = True
        if hadTrue and hadFalse:
            return True
    return False


r1, r2 = tee(generate_random())
assert any_but_not_all(r1)
assert any_but_not_all2(r2)

assert not any_but_not_all([True, True])
assert not any_but_not_all2([True, True])

assert not any_but_not_all([])
assert not any_but_not_all2([])

assert any_but_not_all([True, False])
assert any_but_not_all2([True, False])

0

जब हर दिया जाता boolहै True, या जब हर दिया जाता boolहै False...
वे सभी एक दूसरे के बराबर होते हैं!

इसलिए, हमें केवल दो तत्वों को खोजने की आवश्यकता है जो विभिन्न boolएस
का मूल्यांकन करते हैं ताकि यह पता चल सके कि कम से कम एक Trueऔर कम से कम एक है False

मेरा संक्षिप्त समाधान:

not bool(a)==bool(b)==bool(c)

मैं इसे शॉर्ट-सर्किट मानता हूँ, AFAIK के a==b==cबराबर है a==b and b==c

मेरा सामान्यीकृत समाधान:

def _any_but_not_all(first, iterable): #doing dirty work
    bool_first=bool(first)
    for x in iterable:
        if bool(x) is not bool_first:
            return True
    return False

def any_but_not_all(arg, *args): #takes any amount of args convertable to bool
    return _any_but_not_all(arg, args)

def v_any_but_not_all(iterable): #takes iterable or iterator
    iterator=iter(iterable)
    return _any_but_not_all(next(iterator), iterator)

मैंने कई पुनरावृत्तियों से निपटने के लिए कुछ कोड भी लिखे, लेकिन मैंने इसे यहां से हटा दिया क्योंकि मुझे लगता है कि यह व्यर्थ है। हालाँकि यह अभी भी यहाँ उपलब्ध है


-2

यह मूल रूप से एक "कुछ (लेकिन सभी नहीं)" कार्यक्षमता है (जब any()और all()अंतर्निहित कार्यों के साथ विपरीत )।

इसका तात्पर्य यह है कि परिणामों के बीच में Falses और True s होना चाहिए । इसलिए, आप निम्न कार्य कर सकते हैं:

some = lambda ii: frozenset(bool(i) for i in ii).issuperset((True, False))

# one way to test this is...
test = lambda iterable: (any(iterable) and (not all(iterable))) # see also http://stackoverflow.com/a/16522290/541412

# Some test cases...
assert(some(()) == False)       # all() is true, and any() is false
assert(some((False,)) == False) # any() is false
assert(some((True,)) == False)  # any() and all() are true

assert(some((False,False)) == False)
assert(some((True,True)) == False)
assert(some((True,False)) == True)
assert(some((False,True)) == True)

इस कोड का एक फायदा यह है कि आपको केवल परिणामी (बुलियन) वस्तुओं के माध्यम से एक बार पुनरावृति करने की आवश्यकता है।

एक नुकसान यह है कि इन सभी सत्य-अभिव्यक्तियों का मूल्यांकन हमेशा किया जाता है, और / ऑपरेटरों की तरह शॉर्ट-सर्किटिंग नहीं करते हैं ।orand


1
मुझे लगता है कि यह अनावश्यक जटिलता है। प्लेन पुराने सेट के बजाय फ्रोज़ेनसेट क्यों? क्यों .issupersetनहीं बल्कि सिर्फ लंबाई 2 के लिए जाँच की तुलना में, boolयह सच है और झूठी वैसे भी की तुलना में और कुछ भी वापस नहीं कर सकते हैं। केवल एक डीईएफ़ का उपयोग करने के बजाय एक नाम में लैम्बडा (पढ़ें: अनाम फ़ंक्शन) क्यों असाइन करें?
विम

1
लैम्ब्डा सिंटैक्स कुछ के लिए अधिक तार्किक है। returnयदि आप उपयोग करते हैं तो आपको वैसे ही लंबाई की आवश्यकता है def। मुझे लगता है कि इस समाधान की व्यापकता अच्छी है। यह खुद को बूलियनों तक सीमित करने के लिए आवश्यक नहीं है, प्रश्न अनिवार्य रूप से "मैं अपनी सूची में इन सभी तत्वों को कैसे सुनिश्चित करता हूं"। setयदि आपको उत्परिवर्तन की आवश्यकता नहीं है तो क्यों ? यदि आपको प्रदर्शन की आवश्यकता नहीं है तो अधिक अपरिवर्तनीयता हमेशा बेहतर होती है।
जानूस ट्रॉल्सन

@JanusTroelsen आप सही निशाने पर हैं! ये कुछ कारण हैं कि मैंने इसे इस तरह क्यों किया; यह मुझे आसान और स्पष्ट करता है। मैं पायथन को कोडिंग के अपने तरीके से अनुकूलित करना चाहता हूं :-)।
अब्बाफी

लेकिन यह अनंत जनरेटर पर काम नहीं करेगा: P मेरा जवाब देखें :) संकेत:tee
Janus Troelsen

@JanusTroelsen मुझे इस :-) का एहसास है। मेरे पास वास्तव में इसका दूसरा तरीका था (पहले सेट में ट्रू / फाल्स के साथ और मेथेम परम में), लेकिन एहसास हुआ कि यह अनंत जनरेटर के साथ काम नहीं करेगा, और एक उपयोगकर्ता को एहसास नहीं हो सकता है (क्योंकि यह तथ्य नहीं है ) मैं जानता था, itertools.teeलेकिन 1) मैं एक-लाइनर की तलाश में था, जो
वार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.