मान लीजिए मेरे पास 1 से 10 तक की संख्याओं की एक सूची है। मैं इन संख्याओं के वर्गों को जानना चाहता हूं जो 1000 से कम हैं और मुझे वास्तविक संख्याओं की परवाह नहीं है। मैं जो हासिल करने की कोशिश कर रहा हूं उसका यह एक सरल उदाहरण है और मुझे आश्चर्य है कि क्या एकल सूची समझ ऐसा कर सकती है।

मैं इसे इस तरह कर सकता हूं:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
squares_under_1000 = [n ** 2 for n in numbers if n ** 2 < 1000]
print(squares_under_1000) # Output: [1, 4, 27, 256]

समस्या यह है कि मुझे दो बार वास्तविक वर्ग गणना का उपयोग करने की आवश्यकता है - मुझे खुद को दोहराने की जरूरत है और यदि वह ऑपरेशन धीमा था, तो वह धीमा है।

मुझे पता है कि मैं filter का भी उपयोग कर सकता हूं:

squares_under_1000 = list(filter(lambda sq: sq < 1000, [n ** 2 for n in numbers]))

लेकिन मेरी बात इसे दूसरे तरीके से करने की नहीं है, जैसा कि मैं पहले से ही जानता हूं कि कैसे। इसके बजाए: क्या किसी मूल्य की गणना करने के लिए सूची समझ का उपयोग करना और मेरी समझ के if हिस्से में उस गणना मूल्य का उपयोग करना संभव है?

1
Robo Robok 18 नवम्बर 2020, 20:50

3 जवाब

सबसे बढ़िया उत्तर

पायथन 3.8 में असाइनमेंट एक्सप्रेशन जोड़ने के लिए यह तर्कों में से एक था:

>>> [ n2 for n in numbers if (n2 := n ** n) < 1000 ]
[1, 4, 27, 256]
3
chepner 18 नवम्बर 2020, 20:54

आपकी पोस्ट 1000 से कम संख्याओं के वर्ग मांगती है, लेकिन आप अपनी संख्याएं खुद तक बढ़ा रहे हैं; यानी x**x == x^x। मुझे लगता है कि आप x^2 == x**2 चाहते हैं।

@chepner के पास Python 3.8 और इसके बाद के संस्करण के लिए एक अच्छा उत्तर है। नीचे अजगर 3.8 (या यदि आप वालरस ऑपरेटरों को नापसंद करते हैं) के लिए, नेस्टेड सूची समझ यहां टिकट हो सकती है:

numbers = list(range(1,11))
sq_und_1000 = [v for v in [n**2 for n in numbers] if v < 1000]
1
Axel Jacobsen 18 नवम्बर 2020, 20:58

इसे देखो। (शब्दकोश मे।)

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
squares = {n: n**2 for n in numbers}
[v for v in squares.values() if v < 1000]

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

पी.एस. आप अपनी मूल पोस्ट में स्वयं को n बढ़ा रहे थे।

1
navneethc 18 नवम्बर 2020, 21:02