2016-07-05 58 views
0

我的代码应该接收一个数字列表,然后在屏幕上输出重复多次的唯一数字。我不知道为什么,但它不适用于列表中间的数字。我的代码:不能删除没有最后一个对象

a = [int(i) for i in (input().split())] 
a.sort() 
for number in a: 
    if a.count(number)==1: 
     a.remove(number) 
    else: 
     a.remove(a.count(number)-a.count(number)+number) 
for number in a: 
    print(number, end=' ') 

我试着改变,如果在第四个字符串上时,但最后的数字留在列表中。 它应该工作,如:

样品输入1:4 8 0 3 4 2 0 3样品输出1:0 3 4

样品输入2:10样品输出2:

采样输入3:1个1 2 2 3 3样品输出3:1 2 3

样品输入4:1个1 1 1 1 2 2 2采样输出4:1 2

+3

'a.count(number)-a.count(number)+ number' ='number',对不对?你应该为这个任务使用'collections.Counter'。 – qvpham

回答

1

你可以接近这个使用set问题,而不是:

a = list(map(int, input().split())) 
print(" ".join(map(str, set(i for i in a if a.count(i) > 1)))) 

说明:

首先,它看起来像你应该在map功能阅读起来。而不是a = [int(i) for i in (input().split())],您可以只使用,这是更Pythonic。

其次,第二条线的重要组成部分是set(i for i in a if a.count(i) > 1),这只是创建仅包含从a重复的新的列表(即[1, 2, 3, 2, 3]变得[2, 3, 2, 3],然后应用set给它,它转换[2, 3, 2, 3]{2, 3}(这是一个set对象)。

如果你想知道什么map(str, ...)是,它是如此,你可以打印每个元素的新set(如{2, 3}内)。

+0

我学习Python的一门课程,还没有知道。但它看起来很好,很容易。不管怎样,谢谢你。 – pookeeshtron

+0

@AntonL。我添加了一个解释来帮助你理解所发生的一切:) – sidney

1

你可以使用内置库collections来统计列表项并按照所需条件对其进行过滤。

import collections 

ints = map(int, input().split()) 
count = collections.Counter(ints) 
print filter(lambda x: count[x] > 1, count) 
相关问题