我必须使用字典编写一个方法,该字典采用列表a
并返回包含a
元素的列表,该列表出现一次,元素应按与第一个相同的顺序出现发生在a
。我认为正确的方向?这是我的代码:
def only_once(a):
d = {}
for i in a:
d['value'] = i
m = range(len(a))
for num in m:
d['key'] = num
return d.value
如何从列表a
中获取元素并创建值?
答案 0 :(得分:2)
def unique_everseen(iterable, key=None):
"List unique elements, preserving order. Remember all elements ever seen."
# unique_everseen('AAAABBBCCDAABBB') --> A B C D
# unique_everseen('ABBCcAD', str.lower) --> A B C D
seen = set()
seen_add = seen.add
if key is None:
for element in ifilterfalse(seen.__contains__, iterable):
seen_add(element)
yield element
else:
for element in iterable:
k = key(element)
if k not in seen:
seen_add(k)
yield element
顺便说一句,既然您希望订单相同,那么字典在这里就无济于事了。 dict
不保留任何订单。
答案 1 :(得分:0)
这是一个天真的解决方案。它几乎使用dict作为set
,这很愚蠢,因为python有集合。但是嘿。
def only_once(a):
d = {}
for i in a:
d.setdefault(i,0)
d[i] += 1
return [i for i in a if d[i] == 1]
答案 2 :(得分:0)
这是我的解决方案,使用dict理解并按相应的值排序dict键:
def only_once(a):
# create the dictionary using dict comprehension;
# add to the dictionary only if the number of occurences
# equals one
d = {x:a.index(x) for x in a if a.count(x) == 1}
# retrieve the dictionary keys as list and sort them by the value
# of their assigned dictionary values
return sorted(d.keys(), key = d.get)
但我同意dict并不是解决这个问题的最幸运的数据结构选择。