List 使用一个字典,该字典将列表a作为参数,并返回一个包含恰好出现一次的元素的列表

List 使用一个字典,该字典将列表a作为参数,并返回一个包含恰好出现一次的元素的列表,list,python-2.7,dictionary,elements,List,Python 2.7,Dictionary,Elements,我已经在这方面停留了一段时间(Python2.x) 通过使用dict,只编写一次方法(a),该方法将列表a作为参数,并返回包含恰好出现一次的a元素的列表。元素的出现顺序必须与其在a中的第一次出现顺序相同 def once (a): list=[] d = {} run=0 for i in a: d[i] = d.has_key(i) print ([k for k in d.keys() if not d[k]])) 这

我已经在这方面停留了一段时间(Python2.x)

通过使用
dict
,只编写一次方法
(a)
,该方法将列表
a
作为参数,并返回包含恰好出现一次的
a
元素的列表。元素的出现顺序必须与其在
a
中的第一次出现顺序相同

def once (a):

    list=[]
    d = {}
    run=0

    for i in a: 
        d[i] = d.has_key(i)    

    print ([k for k in d.keys() if not d[k]]))
这将打印只出现一次但不按接收顺序出现的元素


任何帮助都很好

您的关键问题是迭代字典键(显式的
.keys()
是不必要的,因为默认情况下迭代字典键)以获得输出;字典是无序的。相反,您需要使用输入顺序:

def only_once(a):
    d = {}
    for item in a:
        if item not in d:
            d[item] = 0
        d[item] += 1
    return [item for item in a if d[item] == 1]

请注意,您的代码从不使用
列表
(当它隐藏一个内置变量时,它是您不应该为自己的变量使用的名称)和
运行
,因此它们应该被删除

输入中有两个元素14,因此输出不应包括14-14是我知道的自己的号码,这是可以的,因为它只发生过一次。例如,输入-->[14,14,-14]。。。输出应该是[-14],因为它只发生一次,我明白了。你的解释有点不清楚。我编辑了我的答案;你在关键点上反复强调的中心批评是站得住脚的。啊,太美了!对不起,我不清楚。感谢你的帮助,这正是我努力想要理解的!谢谢:)另请参见一个字典子类,它为您完成了这项工作。