簡體   English   中英

如果出現多次,請刪除列表中所有出現的項目

[英]Remove all occurrences of item(s) in list if it appears more than once

我需要編碼挑戰的幫助,該挑戰要求刪除列表中出現多次的所有項目。 我的代碼僅刪除了一次。 它不會完全刪除該項目。

def solution(data, n):
    for x in data:
        while data.count(x) > 1:
            data.remove(x)
            continue        
    print(data)

solution([1, 2, 2, 3, 3, 4, 5, 5], 1)
expected result: [1, 4]
actual restult: [1, 2, 3, 4, 5]

您可以使用collections.Counter來計數data中每個元素的所有實例,然后根據此計數僅打印相關的實例:

from collections import Counter


def solution(data, n):
    histogram = Counter(data)
    print([d for d in data if histogram[d] <= n])

solution([1, 2, 2, 3, 3, 4, 5, 5], 1)

或者直接使用data.count()

def solution(data, n):
    print([d for d in data if data.count(d) <= n])

solution([1, 2, 2, 3, 3, 4, 5, 5], 1)

由於這是一個編碼挑戰,因此最好不要依賴於Python特定的東西,例如collectionscount()函數。

通常,您可以使用哈希表以任何一種語言來執行此操作,哈希表在Python中只是一個字典。

我假設參數n的存在是為了使閾值超過該閾值,您可以刪除該數字,而不是簡單地將其硬編碼為1。

data = [1, 2, 2, 3, 3, 4, 5, 5]

def solution(data, n):
    occurrences = {}
    # count occurrences
    for item in data:
        occurrences[item] = occurrences.get(item, 0) + 1
    # return trimmed data
    trimmed_data = []
    for item in data:
        if occurrences[item] <= n:
            trimmed_data.append(item)
    return trimmed_data

solution(data, 1)

產量[1, 4]

這具有O(n)時間復雜度。

您可以通過重復使用第一個列表來保存第二個列表:

def solution(data, n):
    occurrences = {}
    # count occurrences
    for item in data:
        occurrences[item] = occurrences.get(item, 0) + 1
    # return trimmed data
    data.clear()
    for k, v in occurrences.items():
        if v <= n:
            data.append(k)
    return data

您可以這樣做:

def solution(data, n):
    for x in set(data):
        if data.count(x) > n:
            while x in data:
                data.remove(x)
    return data

一些解釋:

  • set(data)使得每個值僅被檢查一次,即使它在data多次出現;
  • 您應該刪除continue語句,它不會執行您可能希望執行的操作;
  • 仔細查看if語句和while語句在做什么;
  • 在你的代碼中, n沒有使用的說法,我認為它應該更換1if直插式。

更新:這是單行版本!

solution = lambda data, n: [x for x in set(data) if data.count(x) <= n]

您可以像以前一樣調用解決方案函數。 如果您對此語法感到困惑,則可以搜索“ python list comprehensions”和“ python lambda”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM