Python Checkio

今天偶尔从一个师兄那里看到了checkio,感觉很好玩。

我看到的第一个题是要求写一个函数,接收一个数组,然后返回其中的重复元素,而且元素的顺序不能发生变化。换句话说,就是去掉其中不含重复的元素。比如:

checkio([1,2,3,1,3])==[1,3,1,3],"1st example"

checkio([1,2,3,4,5])==[], "2nd example"

checkio([5,5,5,5,5])==[5,5,5,5,5],"3rd example"

checkio([10,9,10,10,9,8])==[10,9,10,10,9],"4th example"

我首先想到的是用hash之类的判断重复的方法,后来想毕竟是python应该有好多现成的方法,我想到了list.count()(L.count(value) -> integer -- return number of occurrences of value in L.),鉴于前段时间刚和同学讨论了python的奇葩小特性中的列表解析。我写出了如下的代码:

def checkio(data):
    return [e for e in data if data.count(e) > 1]

看了下上面最火的答案是这样的,只有一行:

checkio=lambda d:[x for x in d if d.count(x)>1]

传说中效率最高的答案是这样的:

def checkio(data):
    from collections import Counter
    nonunique = Counter(data) - Counter(set(data))
    return [x for x in data if x in nonunique]

上面用了collections中的一个Count()方法,生成一个Count对象,其中存储着数组转化成的一个字典,字典的key是数组元素,字典的value是元素在数组中出现的次数,而且两个Count对象相减的时候,会将对应key的value值相减,然后去掉其中value非正的键值对。上面的set方法的作用是Build an unordered collection of unique elements. 这样,就不难理解上面的代码了。

下面是一个求列表元素的中位数的题目,我的代码如下:

def checkio(data):
    l = len(data)
    s = sorted(data)
    if l % 2 == 0:
        return (s[l/2]+s[l/2-1])/2.0
    else:
        return s[l/2]

上面比较火的代码巧妙的利用python中列表可以从后往前索引取值的特性,写出了如下代码:

def checkio(data):
    off = len(data) / 2
    data.sort()
    med = data[off] + data[-(off + 1)]
    return med / 2.0

总之,听好玩的。这里只是写一个例子,推荐给大家。

Python Checkio

时间: 2024-10-13 16:06:17

Python Checkio的相关文章

Challenge Checkio(python)—初尝python练习网站

最近在找点python语言练习的网站,发现这个网站不错 http://www.checkio.org/ 页面设计的也比较漂亮,比较适合学习python的语法知识.不过注册这个网站 开始就得解决一个python问题,不过很简单. 1 #python3.3 is inside 2 def checkio(els): 3 return els 4 5 if checkio([1, 2, 3, 4, 5, 6]) == 6: 6 print('Done!') 对上面的代码 修改checkio中的函数 函

Python习题1:None-Unique Elements 习题+前三名答案解析(checkio.org)

source : www.checkio.org需要翻墙 初学 不定期更新此类题目 描述: 你将得到一个含有整数(X)的非空列表.在这个任务里,你应该返回在此列表中的非唯一元素的列表.要做到这一点,你需要删除所有独特的元素(这是包含在一个给定的列表只有一次的元素).解决这个任务时,不能改变列表的顺序.例如:[1,2,3,1,3] 1和3是非唯一元素,结果将是 [1, 3, 1, 3]. 输入: 一个含有整数的列表. 输出: 一个含有不唯一元素的整数列表. 范例: checkio([1, 2, 3

Python资料& 个人日常总结 _20151220

后期有时间再排版. 后面越来越乱了.没时间整理分类 不嫌麻烦 就打开链接试试吧. 这是我之前为同学准备的,也是我从入门以来搜集的资源 适合以Python为第一个语言来学习编程的同学. 下面这个重要,可以先看看.再往下看.或者通览一遍 有没有你需要的. --> 编程入门指南 v1.4 http://zhuanlan.zhihu.com/xiao-jing-mo/19959253 ???????????? 写给 编程入门者 : __更新关于 0编程者接触Python的知乎讨论 https://www

Python 的经典入门书籍

实python非常适合初学者入门,上手很容易.我就是完全通过网上资源学了python的.最大的是3点经验:1.找一本浅显易懂,例程比较好的教程,从头到尾看下去.不要看很多本,专注于一本.把里面的例程都手打一遍,搞懂为什么.2.去找一个实际项目练手.我当时是因为要做一个网站,不得已要学python.这种条件下的效果比你平时学一门新语言要好很多.所以最好是要有真实的项目做.可以找几个同学一起做个网站之类.3.最好能找到一个已经会python的人.问他一点学习规划的建议,然后在遇到卡壳的地方找他指点.

Check iO:初学Python

The end of other For language training our Robots want to learn about suffixes. In this task, you are given a set of words in lower case. Check whether there is a pair of words, such that one word is the end of another (a suffix of another). For exam

好久没有上checkio,突然发现pycharm集成了,小小惊喜。

翻着pycharm的官网,,突然看到来自官网blog的介绍: http://blog.jetbrains.com/pycharm/2015/10/announcing-pycharm-edu-2-0-2-checkio-integration/ 犹记得11-12年,经常上checkio(http://www.checkio.org/) 练习python,通过解决一个个小问题来熟悉python的基础用法.后续大概在12年开始改版,华丽变身,再后来,,国内网络访问网站很慢,,慢慢的,,忘了这个地方.

python相关的基础知识分享

今日面试,,才发现lambda和fibonacci都忘了怎么写,一年半载没有频繁的用py,以往的兴趣因生活的忙碌而显得生疏了,还好,之前学习整理的文档都放在了网站上,以备查验. 分享出来解决方案: http://www.pcswo.com/static/file/python/basis/function/generator-eg.py >>> m = lambda x,y,z: (x-y)*z >>> print(m(3,1,2)) 4 >>> de

推荐一个娱乐化学习python的网站

https://py.checkio.org/ 这个网站通过解决一些小任务引导初学者了解和使用python来处理一些实际需求.在coding的过程中还可以通过查看提示,帮助完成任务. 不过需要一点英文基础. 完成任务 原文地址:https://www.cnblogs.com/hades/p/8960905.html

娱教于乐!四大游戏类编程网站,学Python再也不枯燥无味了

前言 学习编程虽然对有些人来说是件乐事,但是对大多数人来说仍然是一件比较枯燥困难的事情.当然,面临这样困惑的人,并不是只有你一个,所以,这世界上就出现了许多寓教于乐的通过游戏的形式来教你编程的网站.让你快乐学习编程. CodinGame 四大游戏编程网站,边玩游戏,边学Python,拒绝枯燥快乐编程 这是一个需要编程一个 AI 机器人,然后由它来解决各种面临的问题的有趣游戏.支持各种编程语言. 支持各种编程语言. 网站: https://www.codingame.com/ Code Comba