Пытаетесь удалить элемент списка, если он меньше порога? - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть список:

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

, и я пытаюсь выяснить, состоит ли от 50 до 60 процентов индекса списка из «а».Если это не так, индекс должен быть удален.

Вот что я получил:

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%

Как я могу получить новый измененный список?

Спасибо за помощь!

Ответы [ 3 ]

0 голосов
/ 02 февраля 2019

Для этого вы можете использовать фильтр:

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))
0 голосов
/ 02 февраля 2019

Вы можете определить метод для хранения элементов на основе условия (предиката):

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']
0 голосов
/ 02 февраля 2019
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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...