मान लें कि मेरे पास निम्नलिखित अक्षरों वाली एक सूची है:

lst=['A','B','C','D']

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

res=['A'
     'AB'
     'ABC'
     'ABCD'
     'B'
     'BC'
     'BCD'
     'C'
     'CD'
     'D']

मैंने लूप के लिए निम्नलिखित को लागू किया था, लेकिन एक त्रुटि होती है, जिसमें कहा गया है कि "टाइप एरर: केवल स्ट्र को जोड़ सकता है ("सूची नहीं) से स्ट्र"

res=[]
for x in range(len(lst)):
    for y in range(len(lst)):
        if x==y:
            res.appebd(x)
        if y>x:
            res.append(lst[x]+lst[y:len(lst)-1]

क्या ऐसा करने का एक बेहतर और अधिक कुशल तरीका है?

1
TheObands 2 नवम्बर 2020, 23:05

3 जवाब

सबसे बढ़िया उत्तर
lst=['A','B','C','D']

out = []
for i in range(len(lst)):
    for j in range(i, len(lst)):
        out.append( ''.join(lst[i:j+1]) )

print(out)

प्रिंट:

['A', 'AB', 'ABC', 'ABCD', 'B', 'BC', 'BCD', 'C', 'CD', 'D']
1
Andrej Kesely 2 नवम्बर 2020, 23:09

यह शायद आपको जो मिला है उसके सबसे करीब है और वांछित परिणाम देगा:

res=[]
for x in range(len(lst)):
    for y in range(len(lst)):
        if x==y:
            res.append(lst[x])
        if y>x:
            res.append(''.join(lst[x:y+1]))

आप जिस त्रुटि का वर्णन कर रहे हैं उसका अर्थ है कि आप किसी वर्ण को सूची में जोड़ने का प्रयास कर रहे हैं:

lst[x]+lst[y:len(lst)-1]

Lst[x] एक वर्ण है और lst[y:len(lst)-1] वर्णों की एक सूची है और अजगर यह नहीं जानता कि इसे एक साथ कैसे जोड़ा जाए। जॉइन फंक्शन का उपयोग करते हुए यह एक कैरेक्टर और एक स्ट्रिंग जोड़ सकता है।

0
Najiva 2 नवम्बर 2020, 23:40

हर बार फिर से परिभाषित आंतरिक लूप सीमा वाले नेस्टेड लूप के बजाय, आप itertools का उपयोग कर सकते हैं आपके लिए सीमाएँ उत्पन्न करने के लिए:

from itertools import combinations

lst = ['A','B','C','D']

out = []    
for s, e in combinations(range(len(lst) + 1), 2):
    out.append(''.join(lst[s:e]))

combinations आसानी से हर संभव शुरुआत और अंत तैयार करता है एक एकल range से सूचकांक, प्रत्येक सेट को एक बार में आपके वांछित क्रम में उत्पन्न करते हैं। यह कोड को इतना सरल भी कर देता है कि समकक्ष लिस्टकॉम्प बहुत अपठनीय नहीं है, जिससे आप कोड की तीन पंक्तियों को एक से नीचे कर सकते हैं:

out = [''.join(lst[s:e]) for s, e in combinations(range(len(lst) + 1), 2)]

किसी भी तरह से, out का अंत मूल्य के साथ होता है:

['A', 'AB', 'ABC', 'ABCD', 'B', 'BC', 'BCD', 'C', 'CD', 'D']
0
ShadowRanger 2 नवम्बर 2020, 23:29