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']

我需要我的程序将 22 和 2 识别为不同的项目,这样它就不会删除最后的 2 和 22 中的 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))

这不是很有效,但仍然比两个嵌套循环好得多

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(' ')而不是加入

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 回答