【问题标题】:Trying to remove list element if it's less than threshold?如果列表元素小于阈值,则尝试删除它?
【发布时间】:2019-02-02 22:30:25
【问题描述】:

我有一个清单:

lst = ['aaaaabbbbb','yyyyaaaaaaxxx', 'eeeaaaaassaaa']

我正在尝试查看列表索引的 50% 到 60% 是否包含“a”。如果不是,则应删除该索引。

这是我得到的:

def remove_stuff(sequences, min_c, max_c):
   seq = cleanUp(display(sequences))   # used from another function that makes the list
   for i in seq:
        a = 'a'
        a_find = int(seq.count(a))
        length_seq = int(len(seq))
        average = ((a_find) / length_seq) * 100
        if average < min_c:
            seq.remove(i)
        elif average > max_c:
            seq.remove(i)
         else:
             pass

输出类似于:

['aaaaabbbbb'] # only one that satisfied between 50-60%

我怎样才能获得新的修改列表?

感谢您的帮助!

【问题讨论】:

  • 忘了,让我编辑
  • 请澄清:您需要:a) 从现有列表中删除项目 b) 可以使用过滤值创建新列表

标签: python list


【解决方案1】:
In [2]: lst = ['aaaaabbbbb','yyyyaaaaaaxxx', 'eeeaaaaassaaa']

In [3]: lst = [i for i in lst if 0.5<i.count('a')/len(i)<0.6]

In [4]: lst
Out[4]: ['aaaaabbbbb']

【讨论】:

  • 请注意,您正在创建 new 列表,并且 OP 写道:'索引应该被删除'
  • 我用新列表重新初始化列表。
  • @AlexYu:检查已编辑的问题。 OP想要一个新列表。您当然可以指定相同的名称
  • @Bazingaa 我不清楚 OP 对“新修改列表”的含义 - 它是 “new” 吗?如果是这样 - 为什么“修改”
【解决方案2】:

您可以为此使用过滤器:

def condition_a(elem):
    count_of_a = elem.count('a')
    rate_of_a = count_of_a / len(elem)
    return 0.5 <= rate_of_a <= 0.6

lst = ['aaaaabbbbb','yyyyaaaaaaxxx', 'eeeaaaaassaaa']
list(filter(condition_a, lst))

【讨论】:

    【解决方案3】:

    您可以定义一种方法来根据条件(谓词)保留元素:

    def keep_if(predicate, iterable):
      for element in iterable:
        if predicate(element):
          yield element
    

    然后定义一个方法来测试条件:

    def is_between_50_60_percent(letter, string):
      perc = string.count(letter) / len(string)
      return perc >= 0.5 and perc <= 0.6
    

    鉴于您的清单:

    lst = ['aaaaabbbbb','yyyyaaaaaaxxx', 'eeeaaaaassaaa']
    

    你终于可以打电话了:

    keep_if( lambda x: is_between_50_60_percent('a', x), lst)
    

    res = keep_if( lambda x: is_between_50_60_percent('a', x), lst)
    print(list(res)) #=> ['aaaaabbbbb']
    

    【讨论】:

      猜你喜欢
      • 2021-11-02
      • 2022-06-15
      • 1970-01-01
      • 2021-07-21
      • 2022-01-04
      • 2022-01-24
      • 1970-01-01
      • 2023-02-13
      • 2015-04-10
      相关资源
      最近更新 更多