设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 108416|回复: 60
打印 上一主题 下一主题

【每日一坑 2】 去除重复

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
楼主
发表于 2013-12-16 21:22:43 |只看该作者 |倒序浏览
上周挖了每日一坑的第一坑:随机取数。大家很给力,论坛上已经有了十多份解答。(包括一份c语言版本)

有人说,这是算法题啊。对于普通程序员来说,是的。但对于python程序员来说,有非常简单的做法:

random.sample(range(1, n), m)

range之前介绍过,可以产生一个序列。random.sample是从一个序列中随机取出一些元素。这正好满足了我们的要求。

@nodejx,@TongShan,@h01m3s 用了这种方法。当然,其他方法也是可行的。

不过有些解答没有考虑重复,帖子里已经有人指出了。


今天的坑:从一组数据中去除掉重复的元素,并将其排序输出。比如:
4, 7, 3, 4, 1, 9, 8, 3, 7

输出结果:
1, 3, 4, 7, 8, 9




#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

389

积分

中级会员

Rank: 3Rank: 3

沙发
发表于 2013-12-16 21:37:37 |只看该作者

回帖奖励 +5

filter.py
  1. #! /usr/bin/env python
  2. # coding:utf-8

  3. import sys

  4. if len(sys.argv) == 1:
  5.     print 'Please input like this:./filter.py 4 7 3 4 1 9 8 3 7'
  6. else:
  7.     originList = [int(i) for i in sys.argv[1:]]
  8.     print sorted(set(originList))
复制代码
回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

板凳
发表于 2013-12-16 21:59:36 |只看该作者

回帖奖励 +5

sorted(set((4, 7, 3, 4, 1, 9, 8, 3, 7)))
回复

使用道具 举报

7

主题

1

好友

269

积分

中级会员

Rank: 3Rank: 3

地板
发表于 2013-12-16 22:02:01 |只看该作者

回帖奖励 +5

  1. #!/usr/bin/python
  2. #coding:utf-8

  3. num = [4,7,3,4,1,9,8,3,7]
  4. result = set(num)
  5. print(result)
复制代码
扔到集合里就好了。
回复

使用道具 举报

7

主题

1

好友

269

积分

中级会员

Rank: 3Rank: 3

5#
发表于 2013-12-16 22:11:28 |只看该作者
哇,sample真好用。
不过,应该是n+1才对,哈哈
  1. random.sample(range(1, n+1), m)

  2. #python3
  3. import random
  4. random.sample(list(range(1,n+1),m))
复制代码
回复

使用道具 举报

0

主题

0

好友

19

积分

新手上路

Rank: 1

6#
发表于 2013-12-16 23:12:16 来自手机 |只看该作者

回帖奖励 +5

list(set((4, 7, 3, 4, 1, 9, 8, 3, 7))).sort()
回复

使用道具 举报

0

主题

0

好友

79

积分

注册会员

Rank: 2

7#
发表于 2013-12-17 00:56:08 |只看该作者

回帖奖励 +5

本帖最后由 xuefu 于 2013-12-17 00:59 编辑

第一次发现C标准库里还有排序的函数。。。
  1. #include <assert.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>

  4. int compare_ascending(const void* a, const void* b)
  5. {
  6.   return (*(int*)a - *(int*)b);
  7. }

  8. int main(int argc, const char *argv[])
  9. {
  10.   int a, n, m, i = 0, j = 0;
  11.   int* secret;

  12.   printf("Input n: ");
  13.   scanf("%d", &n);

  14.   assert(n > 1 || n == 1);

  15.   printf("Input m: ");
  16.   scanf("%d", &m);

  17.   if(m > 0 && !(m > n))
  18.     printf("Below is the number: \n");
  19.   else
  20.   {
  21.     printf("the number m should be greater than zero and not larger than n.\n");
  22.     exit(0);
  23.   }

  24.   secret = malloc(sizeof(int) * m);
  25.   srand(time(NULL));

  26.   while(m--)
  27.   {
  28.     /* generate the number you want */
  29.     while(1)
  30.     {
  31.       a = rand() % n + 1;
  32.       /* check a whether is repeated */
  33.       for(j = 0; j < i; j++)
  34.       {
  35.         if(a == secret[j])
  36.         {
  37.           a = 0;
  38.           break;
  39.         }
  40.       }
  41.       if(a != 0)
  42.         break;
  43.     }
  44.     secret[i++] = a;
  45.   }

  46.   qsort(secret, i, sizeof(int), compare_ascending);

  47.   for (j = 0; j < i; j++)
  48.     printf("%d ", secret[j]);

  49.   printf("\n");
  50.   free(secret);

  51.   return 0;
  52. }
复制代码
回复

使用道具 举报

0

主题

0

好友

49

积分

新手上路

Rank: 1

8#
发表于 2013-12-17 03:35:38 |只看该作者
  1. # -*- coding: utf-8 -*-

  2. '''
  3. 今天的坑:从一组数据中去除掉重复的元素,并将其排序输出。比如:
  4. 4, 7, 3, 4, 1, 9, 8, 3, 7

  5. 输出结果:
  6. 1, 3, 4, 7, 8, 9
  7. '''

  8. def filter(list):
  9.         print sorted(set(list))

  10. list = [4,7, 3, 4, 1, 9, 8, 3, 7]

  11. filter(list)
复制代码
回复

使用道具 举报

0

主题

0

好友

6

积分

新手上路

Rank: 1

9#
发表于 2013-12-17 10:46:35 |只看该作者
好吧。可能我的方法比较笨了
  1. rawArr = [4, 7, 3, 4, 1, 9, 8, 3, 7]

  2. for obj in rawArr:
  3.   if rawArr.count(obj) > 1:
  4.     rawArr.remove(obj)

  5. rawArr.sort()
  6. print(rawArr)
复制代码
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

10#
发表于 2013-12-17 13:38:24 |只看该作者
byron 发表于 2013-12-16 22:11
哇,sample真好用。
不过,应该是n+1才对,哈哈

对,失误了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-21 20:15 , Processed in 0.025199 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部