0

ディクショナリを使用してメソッドを作成する必要があります。このメソッドは、リストを取得し、一度出現する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して値を作成する方法は?

4

3 に答える 3

2

itertoolsこのタスクのレシピがあります:

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

ところで、順序を同じにしたいので、ここでは辞書は役に立ちません。Adictは順序を維持しません。

于 2013-10-13T21:45:49.500 に答える
0

これは、辞書内包表記を使用し、辞書キーを対応する値でソートする私のソリューションです。

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 がこの問題を解決するための最も幸運なデータ構造の選択ではないことに同意します。

于 2013-10-14T11:16:14.730 に答える