【问题标题】:Create New List of Repeated Elements Within a Given List在给定列表中创建重复元素的新列表
【发布时间】:2017-01-18 19:33:22
【问题描述】:

我希望我的程序获取一个已经创建的列表,通过它并检查是否有任何重复的元素。然后创建一个仅包含重复元素的新列表。

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]

程序最终打印出起始集

【问题讨论】:

  • 您的方法正在重新调整您传递给它的相同数据而不进行任何修改,也许您的意思是返回 repeats 而不是 data

标签: python python-3.x


【解决方案1】:

通过使用 collections.Counterlist comprehension 表达式来实现此目的的更好方法是:

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

【讨论】:

    【解决方案2】:

    首先,您返回的是数据而不是重复,因此它最终会打印出起始集。 其次 - 您在 for 循环中对 return 语句的缩进将在循环的第一次迭代中返回结果。如果你解决了这个问题,代码就可以工作了。

    def repeated_elements(data):
        repeats = []
        for element in data:
            result = data.count(element)
            if result > 1:
                repeats.append(element)
        return repeats
    

    【讨论】:

      【解决方案3】:

      怎么样:

      >>> lst = [1, 2, 3, 1, 3]
      >>> repeated = [i for i in lst if lst.count(i) > 1]
      [1, 3, 1, 3]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-31
        • 2016-09-07
        • 2015-10-16
        • 2016-01-13
        • 1970-01-01
        • 2020-09-07
        相关资源
        最近更新 更多