Python 在给定列表中创建重复元素的新列表
我希望我的程序获取一个已经创建的列表,遍历它并检查是否有重复的元素。然后创建一个新列表,其中只包含重复的元素Python 在给定列表中创建重复元素的新列表,python,python-3.x,Python,Python 3.x,我希望我的程序获取一个已经创建的列表,遍历它并检查是否有重复的元素。然后创建一个新列表,其中只包含重复的元素 def repeated_elements(data): repeats = [] for element in data: result = data.count(element) if result > 1: repeats.append(element) return data print
def repeated_elements(data):
repeats = []
for element in data:
result = data.count(element)
if result > 1:
repeats.append(element)
return data
print (repeated_elements([1, 2, 3, 1, 3]))#should print out [1, 3, 1, 3]
print (repeated_elements([1, 2, 3, 4, 5]))# should print out []
print (repeated_elements([5, 5, 5, 5, 5]))# should print out [5, 5, 5, 5, 5]
print (repeated_elements([10, 9, 10, 10, 9, 8]))# should print out [10, 9, 10, 10, 9]
程序最终打印出起始集首先,您返回的是数据而不是重复数据,因此它最终打印出起始集。 第二,在for循环中缩进return语句将在循环的第一次迭代中返回结果。如果你解决了这个问题,代码就会正常工作
def repeated_elements(data):
repeats = []
for element in data:
result = data.count(element)
if result > 1:
repeats.append(element)
return repeats
通过使用列表理解表达式实现此目的的更好方法如下:
>>> from collections import Counter
>>> my_list = [1, 2, 3, 1, 3]
>>> my_counter = Counter(my_list)
>>> [i for i in my_list if my_counter[i]>1]
[1, 3, 1, 3]
那么:
>>> lst = [1, 2, 3, 1, 3]
>>> repeated = [i for i in lst if lst.count(i) > 1]
[1, 3, 1, 3]
您正在重新调整传递给它的相同数据,而不做任何修改,也许您的意思是返回
重复
,而不是数据
。类似于本文