2

わかりましたので、スペースを削除して、リスト内の値を重複させる必要があります (数字のみ)。これが私のコードです:

def eliminateDuplicates(lst):
    i=0
    while i<len(lst):
       while lst.count(lst[i])!=1:
            lst.remove(lst[i])
       i=i+1
    print(lst)


def main():
    a=input("Enter numbers: ")
    lst=list(a)
    while ' ' in lst:
        lst.remove(' ')
    eliminateDuplicates(lst)

main()

この方法は効果的で機能しますが、入力が次の場合

Enter numbers: 1 2 3 4 5   3 2 1    1  22

出力結果は

['4', '5', '3', '1', '2']

最後の 2 と 22 の 2 を削除しないように、プログラムで 22 と 2 を異なるアイテムとして認識する必要があります。何か提案はありますか?

編集:すでに回答をくれた2人のポスターに申し訳ありません。set 関数の使用は許可されておらず、順序は関係ありません。

4

2 に答える 2

1

これはあなたが思っていることをしません:

b="".join(a)  # doesn't do anything useful since `a` is already a string
lst=list(b)   # this is converting the string to a list of characters

代わりにこれを試してください:

lst = a.split()  # automatically cleans up the whitespace for you
print(list(set(lst)))

リストをセットに戻し、再びセットに戻すことは、重複を削除する便利な方法です。list何度も何度もスキャンして行う方法と比較して、非常に効率的です。

eliminateDuplicates本当に機能を維持したい場合は、

def eliminate_duplicates(lst):
    return list(set(lst))

def main():
    a=input("Enter numbers: ")
    lst = a.split()               # split automatically cleans up the whitespace
    print(eliminate_duplicates(lst))

if __name__ == "__main__":
    main()

編集:使用が許可されていないためset、重複を削除するCollections別のかなり効率的な方法です

from collections import Counter
def eliminate_duplicates(lst):
    return list(Counter(lst))

これはそれほど効率的ではありませんが、ネストされた 2 つのループよりははるかに優れています。

from itertools import groupby
def eliminate_duplicates(lst):
    [k for k,g in groupby(sorted(lst))]
于 2013-03-15T02:19:12.003 に答える
0

順序は重要ですか?セットにキャストしない場合は、リストにキャストし直します。

lst = [1,2,3,3,6,4,5,6, 3, 22]
lst2 = list(set(lst))

また、おそらくlst = a.split(' ')join ではなく使用する必要があります

def main():
    a=input("Enter numbers: ") # Input the numbers
    clean_a = a.strip(); #Cleans trailing white space.
    lst=list(set(clean_a.split(' '))) #Split into tokens, and remove duplicates
于 2013-03-15T02:17:28.573 に答える