Ich habe eine Liste von Strings und eine Längenbeschränkung N
gegeben. Ich muss eine Funktion schreiben, um aufeinanderfolgende Strings in der Liste zu sammeln, bis der nächste String den Grenzwert N
überschreiten würde. Ich muss eine Liste von Listen zurückgeben, wobei jede Liste die größte zusammenhängende Teilkette ist, die N
Zeichen insgesamt nicht überschreitet. Siehe den folgenden Testfall für ein Beispiel. Wenn eine einzelne Zeichenfolge in der Liste länger als N
ist, muss ich eine nützliche Nachricht drucken und zurückkehren.Wie man die Liste der Zeichenfolgen in Unterlisten aufteilt, in denen len ("". Join (Unterliste)) <= N?
def break_lst(lst, size):
def len_lst(l):
return len("".join(l))
result = []
sublst = []
for i, v in enumerate(lst):
sublst.append(v)
ls = len_lst(sublst)
if ls == size:
result.append(sublst)
sublst = []
elif ls > size:
prev_sublst = sublst[:-1]
if not prev_sublst or len_lst(prev_sublst) > size:
raise Exception("Error: use a bigger size than " + str(size))
else:
result.append(prev_sublst)
sublst = []
return result
if __name__ == "__main__":
lst = ["1", "22", "333", "4444", "55555", "666666", "7777777", "88888888"]
for i in range(17):
try:
print(i, break_lst(lst, size=i))
except Exception as e:
print(e)
Der obige Code nicht nur hässlich, sondern auch fehlerhaft, es gibt mir diese Ausgabe:
Error: use a bigger size than 0
Error: use a bigger size than 1
Error: use a bigger size than 2
Error: use a bigger size than 3
Error: use a bigger size than 4
Error: use a bigger size than 5
Error: use a bigger size than 6
Error: use a bigger size than 7
8 [['1', '22', '333'], ['55555'], ['7777777']]
9 [['1', '22', '333'], ['55555'], ['7777777']]
10 [['1', '22', '333', '4444'], ['55555'], ['7777777']]
11 [['1', '22', '333', '4444'], ['666666']]
12 [['1', '22', '333', '4444'], ['666666']]
13 [['1', '22', '333', '4444'], ['666666', '7777777']]
14 [['1', '22', '333', '4444'], ['666666', '7777777']]
15 [['1', '22', '333', '4444', '55555'], ['666666', '7777777']]
16 [['1', '22', '333', '4444', '55555']]
Wenn die erwartete Ausgabe sein sollte:
Error: use a bigger size than 0
Error: use a bigger size than 1
Error: use a bigger size than 2
Error: use a bigger size than 3
Error: use a bigger size than 4
Error: use a bigger size than 5
Error: use a bigger size than 6
Error: use a bigger size than 7
8 [['1', '22', '333'], ['4444'], ['55555'], ['666666'], ['7777777'], ['88888888']]
9 [['1', '22', '333'], ['4444', '55555'], ['666666'], ['7777777'], ['88888888']]
10 [['1', '22', '333', '4444'], ['55555'], ['666666'], ['7777777'], ['88888888']]
11 [['1', '22', '333', '4444'], ['55555', '666666'], ['7777777'], ['88888888']]
12 [['1', '22', '333', '4444'], ['55555', '666666'], ['7777777'], ['88888888']]
13 [['1', '22', '333', '4444'], ['55555', '666666'], ['7777777'], ['88888888']]
14 [['1', '22', '333', '4444'], ['55555', '666666'], ['7777777'], ['88888888']]
15 [['1', '22', '333', '4444', '55555'], ['666666', '7777777'], ['88888888']]
16 [['1', '22', '333', '4444', '55555'], ['666666', '7777777'], ['88888888']]
Jeder Vorschlag?
Bitte stellen Sie den Beitrag auf die ursprüngliche Frage zurück; Die Antwort stimmt nicht mehr überein. Deine neue Frage sollte genau das gepostet werden: eine neue Frage. \t Auch die Verbesserung der Arbeitscode gehört in CodeReview.StackExchange.com – Prune
@ Prune Ja, sicher, BTW ... Warum hat jemand diese Frage abgelehnt? Soweit ich es verstehe, folgt SO Regeln, auch wenn es Newbie-Ebene ist ...:/ – BPL
Ich weiß es nicht, da ich nicht der Down-Voter bin. Allerdings habe ich Down-Voting wegen der nicht beschreiben Ich habe eine Beschreibung geschrieben, die hoffentlich dieses Problem behebt. – Prune