Codewars--Delete occurrences of an element if it occurs more than n times

Delete occurrences of an element if it occurs more than n times

Descrition of Problem:

在这里插入图片描述
Enough is enough!

Alice and Bob were on a holiday. Both of them took many pictures of the places they’ve been, and now they want to show Charlie their entire collection. However, Charlie doesn’t like this sessions, since the motive usually repeats. He isn’t fond of seeing the Eiffel tower 40 times. He tells them that he will only sit during the session if they show the same motive at most N times. Luckily, Alice and Bob are able to encode the motive as a number. Can you help them to remove numbers such that their list contains each number only up to N times, without changing the order?
Task

Given a list lst and a number N, create a new list that contains each number of lst at most N times without reordering. For example if N = 2, and the input is [1,2,3,1,2,1,2,3], you take [1,2,3,1,2], drop the next [1,2] since this would lead to 1 and 2 being in the result 3 times, and then take 3, which leads to [1,2,3,1,2,3].

Example

delete_nth ([1,1,1,1],2) # return [1,1]

delete_nth ([20,37,20,21],1) # return [20,37,21]

Sample Tests:

在这里插入图片描述

Version of Python:

在这里插入图片描述

Method1:

def delete_nth(order,max_e):
    if not order or max_e<0:
        return []
    new_order=[]
    idx_order={x:0 for x in order}
    for item in order:
       if idx_order[item]<max_e:
           idx_order[item]+=1
           new_order.append(item)
    return new_order

Grammar Explanation:

  • if not:
 if not order or max_e<0:

None,False,0,[ ],{ },( )are equal to false.So,as you can see,“not order” is equal to that the “order” is empty. “Not false” is equals to true.

  • the complex for circulation
idx_order={x:0 for x in order}

Reference to the link.

Computational Results:

在这里插入图片描述

Method2:

def delete_nth(order,max_e):
    ans = []
    for o in order:
        if ans.count(o) < max_e: ans.append(o)
    return ans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值