मान लें कि मेरे पास निम्नलिखित अक्षरों वाली एक सूची है:
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]
क्या ऐसा करने का एक बेहतर और अधिक कुशल तरीका है?
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']
यह शायद आपको जो मिला है उसके सबसे करीब है और वांछित परिणाम देगा:
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] वर्णों की एक सूची है और अजगर यह नहीं जानता कि इसे एक साथ कैसे जोड़ा जाए। जॉइन फंक्शन का उपयोग करते हुए यह एक कैरेक्टर और एक स्ट्रिंग जोड़ सकता है।
हर बार फिर से परिभाषित आंतरिक लूप सीमा वाले नेस्टेड लूप के बजाय, आप 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']
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।