Prima di pensare che sia duplicato (ci sono molte domande che chiedono come suddividere le stringhe lunghe senza rompere le parole) tenere presente che il mio problema è un po 'diverso: l'ordine non è importante e io 'Adattare le parole per usare ogni riga il più possibile.Suddivisione di stringhe lunghe senza rotture di parole righe di riempimento
Ciao,
Ho un insieme non ordinato di parole e voglio combinarli senza utilizzare più di 253 caratteri.
def compose(words):
result = " ".join(words)
if len(result) > 253:
pass # this should not happen!
return result
Il mio problema è che voglio provare a riempire la linea il più possibile. Ad esempio:
words = "a bc def ghil mno pq r st uv"
limit = 5 # max 5 characters
# This is good because it's the shortest possible list,
# but I don't know how could I get it
# Note: order is not important
good = ["a def", "bc pq", "ghil", "mno r", "st uv"]
# This is bad because len(bad) > len(good)
# even if the limit of 5 characters is respected
# This is equivalent to:
# bad = ["a bc", "def", "ghil", "mno", "pq r", "st uv"]
import textwrap
bad = textwrap.wrap(words, limit)
Come posso fare?
Questo è un problema di programmazione dinamica; attaccalo nello stesso modo in cui attacchi il [problema di cambio monete] (http://www.geeksforgeeks.org/dynamic-programming-set-7-coin-change/). –