Разделить список на два в зависимости от условия и возвращаемого значения из большего списка - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть следующий список:

 mylist = [0.254, 0.754, 0.152, 0.981, 0.614]

Мой список содержит числа, которые меньше или равны 0.5 и числа больше 0.5.

Я хочувыберите наиболее частую категорию, определяемую тем, сколько <= 0,5 и сколько> 0,5.

Например, в приведенном выше списке больше чисел больше 0,5, чем меньше 0,5, 3 против 2Я хочу вернуть один из этих чисел в качестве вывода, например 0,754.

Ответы [ 4 ]

0 голосов
/ 28 сентября 2018

Вы можете подойти к этой проблеме, сначала определив наиболее распространенную категорию;например через collections.Counter.Затем введите это в понимание генератора и извлеките первое значение в области.

Алгоритм будет иметь линейную сложность по времени.

from collections import Counter

L = [0.254, 0.754, 0.152, 0.981, 0.614]
flag = Counter(i > 0.5 for i in L).most_common(1)[0]

L_filtered = (i for i in L if ((i > 0.5) if flag else (i <= 0.5)))
sample = next(iter(L_filtered))  # 0.754
0 голосов
/ 28 сентября 2018

Просто пройдите по списку и добавьте к нужному списку.Сохраняя простоту, насколько это возможно:

mylist = [0.254,0.754,0.152,0.981,0.614]

above = []
below = []
for num in mylist:
    if num > 0.5:
        above.append(num)
    else:
        below.append(num)
if len(above) > len(below):
    print(above[0])
elif len(below) != 0:
    print(below[0])

вывод:

0.754
0 голосов
/ 28 сентября 2018
import random
random_value = None
my_list = [0.254,0.754,0.152,0.981,0.614]
small_list = [elem for elem in my_list if elem < 0.5]
large_list = [elem for elem in my_list if elem > 0.5]
try:
    if len(small_list) == len(large_list):
        random_value = random.choice(small_list)
    if len(small_list) < len(large_list):
        random_value = random.choice(small_list)
    else:
        random_value = random.choice(large_last)
    print(random_value)
except IndexError as e:
    print("something went wrong got two empty lists")
0 голосов
/ 28 сентября 2018

Вы можете filter вычеркнуть два списка из оригинала и затем вернуть наиболее частый из большого списка

l1 = list(filter(lambda x: x > .5, l))
l2 = list(filter(lambda x: x < .5, l))
if len(l1) > len(l2):
    print(max(set(l1), key = l1.count))
else:
    print(max(set(l2), key = l2.count))
0.754
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...