题目:明明的随机数
原题目的表述有点复杂,我理解下来就是有一组随机数,对其去重之后按升序排序,自己写了下面的代码,进行测试,没毛病,可是系统不通过
import sys
l=[]
for n in sys.stdin:
l.append(int(n.strip('\n')))
r = sorted(list(set(l)))
for i in r:
print i
下面是我学习的通过代码:
while True:
try:
nums = [int(raw_input()) for _ in range(input())]
print '\n'.join(map(str, sorted(set(nums))))
except EOFError:
break
有以下几个知识点:
1、单下划线的含义
有三种:
1)在解释器中:在这种情况下, “_”代表交互式解释器会话中上一条执行 的语句的结果。
2)作为一个名称:这与上面一点稍微有些联系,此时“_”作为临时性的名称使用。
3)国际化:也许你也曾看到“_”会被作为一个函数来使用。
在这个例子中,应该是第二种用法
不过还没有弄明白为什么这么写
2、使用input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的
当输入为纯数字时
input返回的是数值类型,如int,float
raw_inpout返回的是字符串类型,string类型
输入字符串为表达式
input会计算在字符串中的数字表达式,而raw_input不会。
3、map函数将set中的每个元素转换为字符
4、sorted排序不会影响原列表
另外还有一种写法:
import sys
while True:
try:
n = int(sys.stdin.readline())
res = []
for i in range(n):
res.append(int(sys.stdin.readline()))
for i in sorted(set(res)):
print i
except:
break
这种写法中sys.stdin.readline()是读入一行,然后进行处理,不用考虑换行符了
参考资料:
http://blog.csdn.net/kjing/article/details/7450146
http://python.jobbole.com/81129/
https://www.nowcoder.com