请帮助我,我想编写一个以列表作为参数的函数,并返回一个从原始列表中出现多次的新元素列表。我试着用这种方式写它,但它没有给我答案
def list(n):
l = [ ]
for s in n:
if n.count(s) > 1:
l.append(s)
return l
return None
答案 0 :(得分:2)
您可以使用filter()
功能来执行此操作。
对于CPU而言,这不是最快的,但足够简洁和pythonic。
my_list = [1, 2, 2, 3, 4, 4, 5, 5, 6, 7]
print filter(lambda x: my_list.count(x) > 1, my_list)
此外,您可以使用list comprehension作为6502提及:
my_list = [1, 2, 2, 3, 4, 4, 5, 5, 6, 7]
print [x for x in my_list if my_list.count(x) > 1]
答案 1 :(得分:2)
你很亲密。您需要从for循环中删除return
语句。事实上,你在第一个元素之后无条件地返回。
def list(n):
l = []
for s in n:
if n.count(s) > 1:
l.append(s)
return l
其次,我强烈建议您不要使用list
作为此函数的名称,因为这会影响内置list
函数,这非常有用。
答案 2 :(得分:1)
def list_duplicates(seq):
seen = set()
seen_add = seen.add
#adds all elements it doesn't know yet to seen and all other to seen_twice
seen_twice = set( x for x in seq if x in seen or seen_add(x) )
# turn the set into a list (as requested)
return list( seen_twice )
a = [1,2,3,2,1,5,6,5,5,5]
list_duplicates(a)
这将打印
[1,2,5]
答案 3 :(得分:0)
我认为Eugene Naydenov
的解决方案很好,但我有所改进:
In [1]: my_list = [1, 2, 2, 3, 4, 4, 5, 5, 6, 7];
In [2]: set_list = lambda(lst) : list(set(i for i in filter(lambda x: my_list.count(x) > 1, lst))) #set_list is function
In [3]: set_list(my_list)
Out[3]: [2, 4, 5]