सूची समझ का उपयोग कर लूप्स के लिए नेस्टेड


85

अगर मेरे पास दो तार होते हैं, 'abc'और 'def', मैं छोरों के लिए दो का उपयोग करके उनमें से सभी संयोजन प्राप्त कर सकता हूं:

for j in s1:
  for k in s2:
    print(j, k)

हालाँकि, मैं सूची की समझ का उपयोग करके ऐसा करने में सक्षम होना चाहूंगा। मैंने कई तरह की कोशिश की है, लेकिन कभी इसे पाने में कामयाब नहीं हुआ। क्या किसी को भी यह करना आता है?

जवाबों:


133
lst = [j + k for j in s1 for k in s2]

या

lst = [(j, k) for j in s1 for k in s2]

यदि आप tuples चाहते हैं।

जैसे प्रश्न में, for j...बाहरी लूप for k...है, आंतरिक लूप है।

अनिवार्य रूप से, आपके पास x के लिए y 'खंडों में उतने ही स्वतंत्र' हो सकते हैं, जितने कि आप एक के बाद एक चिपकाकर सूची समझ चाहते हैं।


1
यदि आप नेस्टेड लूप को नेस्टेड सूची से अधिक बनाना चाहते हैं, तो क्या करें? कुछ इस तरह से: [प्रिंट ('ए') कुल्हाड़ियों में कुल्हाड़ियों के लिए कुल्हाड़ी में कुल्हाड़ी के लिए] [कोई नहीं, कोई भी नहीं ...] पर एक गुच्छा छप रहा है (कुल्हाड़ी)
पाब्लो रुइज़ रुइज़

@ पाब्लो मुझे लगता है कि आपने अपने छोरों को उलट दिया था। L1 = [[[e1, e2, ...], ...], ...]->[ e for L2 in L1 for L3 in L2 for e in L3 ]
AnOccasionalCashew

forकथनों का क्रम वही है जैसे आपने इसे forदो अलग-अलग पंक्तियों पर दो छोरों के रूप में लिखा था ।
बोरिस

aaronasterling क्या मैं निम्नलिखित में सशर्त बयानों का उपयोग कर सकता हूं?
सालिक मलिक

lst = [j+k if BLAHBLAHBLAH for j in s1 for k in s2]या कुछ और
सालिक मलिक

34

चूंकि यह मूल रूप से कार्टेशियन उत्पाद है, इसलिए आप itertools.product का भी उपयोग कर सकते हैं । मुझे लगता है कि यह स्पष्ट है, खासकर जब आपके पास अधिक इनपुट पुनरावृत्तियाँ हों।

itertools.product('abc', 'def', 'ghi')

0

पुनरावर्तन का भी प्रयास करें:

s=""
s1="abc"
s2="def"
def combinations(s,l):
    if l==0:
        print s
    else:
        combinations(s+s1[len(s1)-l],l-1)
        combinations(s+s2[len(s2)-l],l-1)

combinations(s,len(s1))

आपको 8 संयोजन देता है:

abc
abf
aec
aef
dbc
dbf
dec
def

ओपी के सवाल के अनुसार, मुझे लगता है कि आउटपुट को अक्षरों के जोड़े देने चाहिए, और 9 संयोजन होने चाहिए।
मटिया

क्या हुआ: पेट, अबे, एसीडी, ऐस, एसीएफ, एडीबी, एडीसी, एडीई, एडीएफ, एईबी, एडी, एफडी, एफबी, एफसी, एफडी, एफई, और सभी सी, ई, या एफ के साथ शुरू होने वाले? यहां तक ​​कि अगर आदेश महत्वपूर्ण नहीं है, तो छोड़ दिया जाता है: बीडीए, एडी, आदि
हैरी बिन्सवांगर

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