如何在python中动态提供列表的大小以及如何在python中分配指定范围内的值?

How to dynamically provide the size of a list in python and how to distribute the values in a specified range in python?

我让用户输入列表值,可以是 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

只需使用列表理解:

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,因为那样会覆盖 built-ins

使用 numpy.searchsortedcollections.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}