如何找到列表中出现两次并在python中打印出来的数字?

时间:2016-11-11 21:47:14

标签: python list

我的学业作业需要一些帮助。我应该在python中编写一个程序,要求该人提供一个数字列表,在我的情况下:

[53,16,22,81,43,16,88,55,43,5]

按照出现的顺序打印出两次出现的数字。我也应该在我的程序中使用eval函数。

目前我所拥有的只是:

list= eval(input("Input your list: "))

最终结果应该在python shell中看起来像这样:Input a list: [53,16,22,81,43,16,88,55,43,5] [16, 43]

请帮忙!

1 个答案:

答案 0 :(得分:0)

编辑:从评论中我了解输出中的数字应该按照输入中第二个的顺序列出,正如描述显然所示:

  

当学生们去买多余的蛋糕时,这些数字应该是[的]顺序。

您可以将列表理解与inp[:i].count(inp[i]) == 1一起用作过滤条件,这意味着当前数字应该当前索引之前出现

inp = eval(input('Input your list:'))
print([j for i, j in enumerate(inp) if inp[:i].count(j) == 1])

不要将list用作变量名,因为它是Python中的existing function

正如其他人所说:使用eval is frowned upon,当然,当用户提供参数时。

基本替代方案(效率不高)

这实现了相同的算法,但只使用最基本的结构:

result = []
n = len(inp)
for i in range(n):
    count = 0
    # only look at number preceding the one at i
    for j in range(i): 
        if inp[i] == inp[j]:
            count += 1
            # we look for cases where there is exactly one match
            # so we know that at i it is the 2nd occurrence
            if count == 2:
                break
    if count == 1:
        result.append(inp[i])
print(result)