Как динамически предоставить размер списка в Python и как распределить значения в указанном диапазоне в Python? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть пользователь, чтобы ввести значения списка, которые могут быть что-нибудь вроде 1 0,95 0,9 0,7 0,6 Числа всегда будут в порядке убывания, а числа ниже 0,6 всегда будут считаться меньше 0,6. Теперь у меня есть список значений в диапазоне от 0-1 до 35 значений, и мне нужно разделить значения в этих категориях.

Я понятия не имею, как поступить с ним, поскольку пользователь может дать любое количество значений от 0,6 до 1,0

.

Я пытался найти, сколько значений там больше 0,6, но потом не знал, что делать дальше, чтобы разделить список различных значений в соответствующих диапазонах.

Это код, который я пытался определить, сколько значений больше 0,6, есть ли 0,6 и сколько значений меньше 0,6, заданных пользователем.

greater = 0
equal = 0
lower = 0
for i in args['range']:
    if i > 0.6:
        greater += 1
    elif i == 0.6:
        equal += 1
    else:
        lower += 1

предположим, что есть список чисел n = [0,0, 0,2, 0,4, 0,2, 0,8, 0,7, 0,1, 0,3, 0,5]

и пользователь дал такие значения, как: 1 0,99 0,8 0,6 0,4

Теперь программа должна распределять такие значения, как

values_equal_to_1 = 0
values_between_0.99_and_0.8 = 1
values_between_0.6_and_0.8 = 1
values_less_than_0.6 = 7

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Использование numpy.searchsorted и collections.Counter:

import numpy as np
from collections import Counter

user_input = '1 0.99 0.8 0.6 0.4'
intv = sorted([float(i) for i in user_input.split() if float(i) >=0.6])
# [0.6, 0.8, 0.99, 1.0]

n = [0.0, 0.2, 0.4, 0.2, 0.8, 0.7, 0.1, 0.3, 0.5]
d = Counter(np.searchsorted(sorted(intv), n, 'right'))

Выход d:

Counter({0: 7, 1: 1, 2: 1})

Затем вы можете сделать такое представление, как:

{'values less than or equal to %s' % i: d.get(n,0) for n, i in 
enumerate(sorted(intv))}

Выход:

{'values less than or equal to 0.6': 7,
 'values less than or equal to 0.8': 1,
 'values less than or equal to 0.99': 1,
 'values less than or equal to 1.0': 0}
0 голосов
/ 09 июля 2019

Просто используйте список понимания:

values_equal_to_1 = len([x for x in list if x == 1])
values_between_99_and_8 = len([x for x in list if .8 < x < .99])
values_between_6_and_8 = len([x for x in list if .6 < x < .8])
values_less_than_6 = len([x for x in list if x < .6])

list - список значений, которые вводит пользователь. На самом деле не называйте его list, так как это переопределит встроенные модули

...