2015-08-20 4 views
5

पर विभाजित करें मेरे पास एक लंबी स्ट्रिंग है जिसे मैं अधिकतम एक्स वर्णों के टुकड़ों में तोड़ना चाहता हूं। लेकिन, केवल एक स्थान पर (यदि स्ट्रिंग में कुछ शब्द एक्स वर्णों से लंबा है, तो इसे अपने स्वयं के टुकड़े में रखें)।अधिकतम लंबाई एक्स के टुकड़ों में एक स्ट्रिंग को विभाजित करें - केवल

मैं भी कैसे यह करने के लिए शुरू करने के लिए नहीं पता ... Pythonically

छद्म कोड:

declare a list 
while still some string left: 
    take the fist X chars of the string 
    find the last space in that 
    write everything before the space to a new list entry 
    delete everything to the left of the space 

इससे पहले कि मैं उस कोड, वहाँ कुछ अजगर मॉड्यूल मेरी मदद कर सकते हैं कि (है मुझे नहीं लगता कि pprint कर सकते हैं)?

+4

मैं अभी हाल ही में पता चला अजगर है कि एक [textwrap] (https://docs.python.org/3.5/ लाइब्रेरी/textwrap.html # मॉड्यूल-टेक्स्टव्रप) मॉड्यूल;) – swenzel

उत्तर

13

इस प्रकार मैं इसे कैसे पहुंचूंगा: सबसे पहले, पाठ को शब्दों में विभाजित करें। एक पंक्ति में पहले शब्द के साथ शुरू करें और शेष शब्दों को फिर से शुरू करें। यदि अगला शब्द वर्तमान रेखा पर फिट बैठता है, तो इसे जोड़ें, अन्यथा वर्तमान रेखा को समाप्त करें और शब्द को अगली पंक्ति के लिए पहले शब्द के रूप में उपयोग करें। तब तक दोहराएं जब तक कि सभी शब्दों का उपयोग नहीं किया जाता है।

text = "hello, this is some text to break up, with some reeeeeeeeeaaaaaaally long words." 
n = 16 

words = iter(text.split()) 
lines, current = [], next(words) 
for word in words: 
    if len(current) + 1 + len(word) > n: 
     lines.append(current) 
     current = word 
    else: 
     current += " " + word 
lines.append(current) 

अपडेट::

यहाँ कुछ कोड है textwrap: जैसा कि @swenzel द्वारा टिप्पणी में कहा, वहाँ वास्तव में उस के लिए एक मॉड्यूल है। इस कोड को ऊपर के रूप में एक ही परिणाम का उत्पादन करेगा (और यह भी हाइफ़न पर टूट जाएगा):

import textwrap 
lines = textwrap.wrap(text, n, break_long_words=False) 
+0

यह मेरी तुलना में बेहतर एल्गोरिदम की तरह दिखता है (+1) – Mawg

संबंधित मुद्दे