【Python CheckiO 题解】Create Intervals


CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。

CheckiO 官网:https://checkio.org/

我的 CheckiO 主页:https://py.checkio.org/user/TRHX/

CheckiO 题解系列专栏:https://itrhx.blog.csdn.net/category_9536424.html

CheckiO 所有题解源代码:https://github.com/TRHX/Python-CheckiO-Exercise


题目描述

【Create Intervals】:给定一个由整数组成的字典,找到连续的一串数字,将这串连续的数字的第一个数和最后一个数组成一个元组,最后返回多个元组组成的列表。

【链接】https://py.checkio.org/mission/create-intervals/

【输入】:字典

【输出】:两个整数组成的元组列表

【范例】

create_intervals({1, 2, 3, 4, 5, 7, 8, 12}) == [(1, 5), (7, 8), (12, 12)]
create_intervals({1, 2, 3, 6, 7, 8, 4, 5}) == [(1, 8)]

解题思路

定义两个列表,start 列表用于储存元组的第一个数字,end 列表用于储存元组的第二个数字;

对于 start 列表:循环访问 data 字典,遍历所有数字,将数字减一,如果没有在原字典中,则表示这个数字是一个元组开头的数字;

对于 end 列表:循环访问 data 字典,遍历所有数字,将数字加一,如果没有在原字典中,则表示这个数字是一个元组结束的数字;

最后使用 zip 方法将两个列表中对应的元素打包成一个个元组,然后返回由这些元组组成的列表即可。

代码实现

def create_intervals(data):
    start, end = [], []
    for i in data:
        if i-1 not in data:
            start.append(i)
        if i+1 not in data: 
            end.append(i)
    return list(zip(sorted(start), sorted(end)))


if __name__ == '__main__':
    #These "asserts" using only for self-checking and not necessary for auto-testing
    assert create_intervals({1, 2, 3, 4, 5, 7, 8, 12}) == [(1, 5), (7, 8), (12, 12)], "First"
    assert create_intervals({1, 2, 3, 6, 7, 8, 4, 5}) == [(1, 8)], "Second"
    print('Almost done! The only thing left to do is to Check it!')

大神解答

大神解答 NO.1

def create_intervals(data):
    left = [x for x in data if x - 1 not in data]
    right = [x for x in data if x + 1 not in data]
    return list(zip(sorted(left), sorted(right)))

大神解答 NO.2

def create_intervals(data):
    plus_one, minus_one = [], []
    for d in sorted(data):
        if d - 1 not in data:
            minus_one.append(d)
        if d + 1 not in data:
            plus_one.append(d)
    return list(zip(minus_one, plus_one))

大神解答 NO.3

def create_intervals(data):
    return list(zip(sorted(x for x in data if x-1 not in data),
                    sorted(x for x in data if x+1 not in data)))
发布了157 篇原创文章 · 获赞 609 · 访问量 50万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览