अगर बयान के साथ समझ की सूची


106

मैं 2 पुनरावृत्तियों की तुलना करना चाहता हूं और उन आइटम्स को प्रिंट करना चाहता हूं जो दोनों पुनरावृत्तियों में दिखाई देते हैं।

>>> a = ('q', 'r')
>>> b = ('q')


# Iterate over a. If y not in b, print y.
# I want to see ['r'] printed.
>>> print([ y if y not in b for y in a])
                              ^

लेकिन यह मुझे एक अवैध सिंटैक्स त्रुटि देता है जहां ^रखा गया है। इस लांबा फ़ंक्शन के बारे में क्या गलत है?


5
नीचे दिए गए सभी उत्तर सही हैं, लेकिन b = ('q')टपल भी नहीं बनाते हैं। एक तत्व के साथ ट्यूपल्स को एक स्पष्ट की आवश्यकता है ,, वह हैb = ('q',)
dmg

में बदल tuplesगया हूं iterables
ऑरेंजटैक्स

जवाबों:


187

आपको आदेश गलत मिला। के ifबाद होना चाहिए for(जब तक कि यह if-elseटर्नरी ऑपरेटर में न हो)

[y for y in a if y not in b]

हालांकि यह काम करेगा:

[y if y not in b else other_value for y in a]

धन्यवाद। मैंने एक लैम्बडा फ़ंक्शन में एक और स्टेटमेंट के बारे में इस पोस्ट stackoverflow.com/questions/4406389/… को देखा । और मैंने सोचा कि यदि केवल कथन (दूसरे के बिना) का उपयोग करना उसी क्रम में काम करेगा।
ऑरेंजटैक्स

39

आप ifअंत में डालते हैं :

[y for y in a if y not in b]

सूची की समझ उसी क्रम में लिखी जाती है जब उनके नेस्टेड पूर्ण-निर्दिष्ट समकक्षों, अनिवार्य रूप से उपरोक्त कथन निम्नानुसार होता है:

outputlist = []
for y in a:
    if y not in b:
        outputlist.append(y)

आपके संस्करण ने इसके बजाय ऐसा करने की कोशिश की:

outputlist = []
if y not in b:
    for y in a:
        outputlist.append(y)

लेकिन एक सूची की समझ कम से कम एक बाहरी लूप से शुरू होनी चाहिए


आप बहुत मददगार रहे हैं। धन्यवाद।
तोलघन ÜZÜN

7

सूची बोध सूत्र:

[<value_when_condition_true> if <condition> else <value_when_condition_false> for value in list_name]

इस प्रकार आप इसे इस तरह से कर सकते हैं:

[y for y in a if y not in b]

केवल प्रदर्शन उद्देश्य के लिए: [y यदि b b में नहीं तो y में y के लिए गलत]


2
आप elseएक सूची समझ में नहीं डाल सकते हैं , न कि जहां आप कम से कम एक डालते हैं। एक सशर्त अभिव्यक्ति के साथ एक सूची समझ (फ़िल्टरिंग) को भ्रमित न करें, (जिसमें एक मूल्य होना चाहिए, जिससे अन्य अभिव्यक्ति अनिवार्य हो)।
Martijn Pieters

इस बात से सहमत। elseजैसा कि कोड में दिखाया गया है सूची समझ में उपयोग किया जा सकता है।
विश्वजीत पाठक

2
यह एक सशर्त अभिव्यक्ति है । यह कहीं भी इस्तेमाल किया जा सकता है एक वैध अभिव्यक्ति लागू है। यह समझ की सूची के लिए विशिष्ट नहीं है।
मार्टिन पीटर्स

5

यह एक मेमना कार्य नहीं है। यह एक सूची बोध है।

बस क्रम बदलें:

[ y for y in a if y not in b]

-2

मैंने अपनी स्थिति के लिए सूची बोध के उपर्युक्त सुझावों पर शोध किया और उनकी कोशिश की, हालांकि नीचे वर्णित नहीं किया गया था। मुझसे यहां क्या गलत हो रहा है?

sent_splt=[['good', 'case,', 'excellent', 'value.'], ['great', 'for', 'the', 'jawbone.'],['tied', 'to', 'charger', 'for', 'conversations', 'lasting', 'more', 'than', '45', 'minutes.major', 'problems!!']]

stop_set = ['the', 'a', 'an', 'i', 'he', 'she', 'they', 'to', 'of', 'it', 'from']

x=[a for a in sent_splt if a not in stop_set]
print(x)

यह शब्दों को फ़िल्टर नहीं कर रहा है।


1
प्रश्न पूछने के लिए आपको क्या करने की आवश्यकता है। उत्तर पोस्ट न करें।
व्हर्ल माइंड

दरअसल, यह मेरे लिए पिछले 2 दिनों से 1 दिन के ब्रेक के बाद सवाल पोस्ट करने के लिए कह रहा है। मूल रूप से मुझे अपने पिछले प्रश्न के कारण प्रश्न पोस्ट करने की अनुमति नहीं है जो स्टैकओवरफ़्लो मानक के अनुसार नहीं था। विसंगति के लिए क्षमा करें।
दीपक धीमान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.