前提・実現したいこと
CheckiOのこちらの課題をやっています.
create_intervals() 関数をジェネレータ関数として実装せよとのことなのですが,ジェネレータ関数を以下のassertが通るような出力にする方法が思いつきません.
(以下のソースコード2のように,別に用意したジェネレータ関数で生成したイテレータを用いてcreate_intervalsでリストを返すものも書いてみましたが,create_intervalsがジェネレータでないとのことで通りませんでした)
このアルゴリズムでは該当する出力はできないのでしょうか?
該当のソースコード
python
1def create_intervals(data): 2 data_s = sorted(data) 3 4 first = data_s[0] 5 6 for i, v in enumerate(data_s): 7 if not v + 1 in data_s: 8 yield (first, v) 9 if i < len(data_s) - 1: 10 first = data_s[i + 1] 11 12 13if __name__ == '__main__': 14 assert create_intervals({1, 2, 3, 4, 5, 7, 8, 12}) == [(1, 5), (7, 8), (12, 12)], "First" 15 assert create_intervals({1, 2, 3, 6, 7, 8, 4, 5}) == [(1, 8)], "Second" 16 print('Almost done! The only thing left to do is to Check it!')
一応試してみたソースコード2
python
1def get_intervals(data): 2 data_s = sorted(data) 3 4 first = data_s[0] 5 6 for i, v in enumerate(data_s): 7 if not v + 1 in data_s: 8 yield (first, v) 9 if i < len(data_s) - 1: 10 first = data_s[i + 1] 11 12 13def create_intervals(data): 14 result = [] 15 for i in get_intervals(data): 16 result.append(i) 17 18 return result
補足情報(FW/ツールのバージョンなど)
python 3.7
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/08 02:23