鱼C论坛

 找回密码
 立即注册
查看: 1879|回复: 26

[技术交流] Python:每日一题 188

[复制链接]
发表于 2018-7-21 14:31:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2018-7-23 21:03 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。开始阶段是看不到其他人的回帖的,等答题完成,开始评分时再取消限制。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
列表是可以有重复元素的,要求创建一个新的列表类,没有重复元素,如:
  1. >>> a=Nlist(1,2,2,3)
  2. >>> a
  3. [1, 2, 3]
复制代码

同时修改append方法,使得只加入不重复的元素,如:
  1. >>> a.append(2)
  2. >>> a
  3. [1, 2, 3]
  4. >>> a.append(4)
  5. >>> a
  6. [1, 2, 3, 4]
复制代码

为了简便就不考虑insert, extend等方法了。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-21 14:48:05 | 显示全部楼层
本帖最后由 凌九霄 于 2018-7-21 16:05 编辑
  1. class Nlist(list):

  2.     def __init__(self, *args):
  3.         self.values = list(set(args))

  4.     def __str__(self):
  5.         return str(self.values)

  6.     __repr__ = __str__

  7.     def __len__(self):
  8.         return len(self.values)

  9.     def __getitem__(self, key):
  10.         return self.values[ key ]

  11.     def __setitem__(self, key, value):
  12.         if value not in self.values:
  13.             self.values[ key ] = value

  14.     def __delitem__(self, key):
  15.         del self.values[ key ]

  16.     def append(self, value):
  17.         if value not in self.values:
  18.             self.values.append(value)

  19.     def remove(self, value):
  20.         del self.values[self.values.index(value)]
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-21 15:16:58 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-21 17:13:23 | 显示全部楼层
  1. class Nlist:
  2.     def __init__(self,*args):
  3.         self.list0 = [x for x in args]
  4.     def f(self):
  5.         self.list1 = self.list0
  6.         length = len(self.list0)
  7.         while length:
  8.             for each in self.list1:
  9.                 if self.list0.count(each) > 1:
  10.                     self.list0.remove(each)
  11.             length -= 1
  12.         return self.list0
  13.     def append(self,x):
  14.                 if x in self.list0:
  15.                         return self.list0
  16.                 else:
  17.                         self.list0.append(x)
  18.                         return self.list0
复制代码



b = Nlist(1,2,2,3,4,5,5,2,6,4,4,6)
b.f()
[1, 3, 5, 2, 4, 6]
b.append(3)
[1, 3, 5, 2, 4, 6]
b.append (7)
[1, 3, 5, 2, 4, 6, 7]

点评

又建立了一个属性f存储列表  发表于 2018-7-23 21:07

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-21 21:04:33 | 显示全部楼层
old_list = [1,2,2,3]
new_list = list(set(old_list))

while True:
    num = int(input('输入你要加入的数字:'))
    if num not in new_list:
        new_list.append(num)
        print(new_list)
    else:
        print(new_list)

点评

等学到类,可以再把题目做一下  发表于 2018-7-23 21:08

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-21 21:17:20 | 显示全部楼层
如果没有顺序要求直接上set得了
  1. class Nlist(list):
  2.    
  3.     def __init__(cls, *args):
  4.         result = []
  5.         for i in args:
  6.             if i not in result:
  7.                 result.append(i)
  8.         super().__init__(result)
  9.         
  10.     def append(self, elm):
  11.         if elm not in self:
  12.             super().append(elm)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-7-21 21:25:44 | 显示全部楼层
  1. class Nlist(list):
  2.     def __init__(self,*x):
  3.         super().__init__(set(x))
  4.     def append(self,value):
  5.         if value in self:
  6.             pass
  7.         else:
  8.             super().append(value)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-22 07:30:34 | 显示全部楼层
占楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-22 11:16:20 | 显示全部楼层
  1. class Nlist(list):
  2.     def __init__(self,*args):
  3.         super(Nlist, self).__init__()
  4.         self.args = list(set(args))

  5.     def append(self,x):
  6.         if x not in self.args:
  7.             self.args.append(x)

  8.     def __repr__(self):
  9.         return str(self.args)

  10. if __name__ == '__main__':
  11.     a = Nlist(1,2,2,3)
  12.     print(a)
  13.     a.append(1)
  14.     print(a)
  15.     a.append(10)
  16.     print(a)
复制代码

点评

用repr返回,数据无法再使用,如 a = Nlist(1,2,3),则a[0]就会出错  发表于 2018-7-23 21:15

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-22 20:06:26 | 显示全部楼层
  1. >>> class Nlist(list):
  2.         def __init__(self, *v ):
  3.                 super(Nlist,self).__init__(list(set(v)))
  4.         def append( self, v ):
  5.                 if v not in self:
  6.                         super(Nlist,self).append( v )

  7.                        
  8. >>> a = Nlist(1,2,3,1)
  9. >>> a.append(4)
  10. >>> a
  11. [1, 2, 3, 4]
  12. >>> a.append(1)
  13. >>> a
  14. [1, 2, 3, 4]
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-23 12:27:00 | 显示全部楼层
不会做,问了度娘,才弄出来……

  1. class Nlist(list):
  2.     def __init__(self, *value):
  3.         list.__init__([])
  4.         self.value = self.remove_dup(list(value))
  5.         self.extend(self.value)

  6.     def remove_dup(self, list1):
  7.         return sorted(set(list1), key=list1.index)

  8.     def append(self, i):
  9.         if i not in self.value:
  10.             self.value += [i]
  11.             self.extend([i])


  12. a = Nlist(1, 2, 2, 3)
  13. print(a)
  14. a.append(2)
  15. print(a)
  16. a.append(4)
  17. print(a)
  18. a.append(4)
  19. print(a)
复制代码


结果:
[1, 2, 3]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4]

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-23 12:58:36 | 显示全部楼层
  1. class Nlist(list):
  2.     def __init__(self, *num):
  3.         self.num = list(set(num))
  4.     def append(self, p_object):
  5.         if p_object in self.num:
  6.             pass
  7.         else:
  8.             self.num.append(p_object)
  9.     def __repr__(self):
  10.         return str(self.num)
  11.     def __str__(self):
  12.         return str(self.num)
  13. a=Nlist(1,2,2,3)
  14. print(a)
  15. a.append(2)
  16. print(a)
  17. a.append(4)
  18. print(a)
复制代码


点评

用repr返回,数据无法再使用,如 a = Nlist(1,2,3),则a[0]就会出错  发表于 2018-7-23 21:18

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2018-7-23 15:13:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-23 18:23:57 | 显示全部楼层
  1. class Nlist:
  2.     def __init__(self, *item):self.item = set(item)
  3.     def __repr__(self):return "[%s]" % ", ".join(map(str,self.item))
  4.     def append(self,item):self.item.add(item)
复制代码

点评

用repr返回,数据无法再使用,如 a = Nlist(1,2,3),则a[0]就会出错  发表于 2018-7-23 21:20
用repr返回,数据无法再使用,如 a = Nlist(1,2,3),则a[0]  发表于 2018-7-23 21:20

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2018-7-23 22:17:09 From FishC Mobile | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-24 15:57:09 | 显示全部楼层
小木子c 发表于 2018-7-21 17:13
b = Nlist(1,2,2,3,4,5,5,2,6,4,4,6)
b.f()
[1, 3, 5, 2, 4, 6]

嗯,再加上下面几行
  1. def __repr__(self):
  2.         Nlist.f(self)
  3.         return str(self.list0)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-26 11:39:28 | 显示全部楼层
  1. class Nlist(list):
  2.     def __init__(self,*x):
  3.         self.list = list(set(x))

  4.     def append(self,temp):
  5.         if not temp in self.list:
  6.             self.list += [temp]

  7.     def __str__(self):
  8.         return str(self.list)

  9.     def __repr__(self):
  10.         return str(self.list)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2018-8-9 21:22:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-26 22:05:56 | 显示全部楼层
本帖最后由 子沙 于 2018-9-26 22:09 编辑
  1. class Nlist(list):
  2.     def __init__(self,*var):
  3.         for i in var:
  4.             self.append(i)
  5.     def append(self,another):
  6.         if another in self:
  7.             pass
  8.         else:
  9.             self.insert(len(self),another)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-22 14:51:23 | 显示全部楼层
class Nlist(list):
    def __init__(self, *args):
        self.values = list(set(args))
    def __str__(self):
        return str(self.values)
    __repr__ = __str__
a=Nlist(1,2,2,3)
print(a)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 12:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表