文字列のリストと長さ制限N
が与えられました。次の文字列がN
の制限を超えるまで、リストに連続した文字列を蓄積する関数を書く必要があります。リストのリストを返す必要があります。各リストは、合計でN
文字を超えない最大の連続部分文字列です。 例については、以下のテストケースを参照してください。また、リスト内の単一の文字列がN
より長い場合は、有用なメッセージを出力して返す必要があります。文字列のリストをサブリストに分割する方法len( ""。join(sublist))<= 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)
それはだ上記のコードだけではなく醜いだけでなく、バギー、それは私にこの出力与えている:
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']]
予想される出力は次のようになります。
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']]
任意の提案を?
投稿を元の質問に戻してください。答えはもはや一致しません。あなたの新しい質問は、まったくそのように掲示されるべきです:新しい質問。 \t また、CodeReview.StackExchange.comに作業コードの改善が含まれています – Prune
@Pruneええ、確かに、btw ...なぜ誰かがこの質問をdownvoteでしたか?私が理解している限り、それは初心者レベルであっても、SOのルールに従っています:/ – BPL
私はダウン投票者ではないので、わかりませんが、私は投票しないと考えました。 – Prune