显示输入浮子范围内列表列表的可能元素



假设我有一个包含的列表:

L = [['10.2','9.1','G'],['12.9','7.4','H'],['5.6','4.3','G'],['5.7','4.5','G']]

列表中每个列表中的每个列表中的字母代表'type'

之类的东西

在这种情况下,Python将要求使用":"分隔的四个浮点数的用户输入;

input = 5.5:4.4:5.7:4.7

在Python继续处理输入之前,如列表列表所示,第三部分中每个列表中的字母代表一种类型;

例如,在用户输入时,python将将输入的数量与用户输入范围内列表列表中的值进行比较,> type'G'g'g'

因此,python将从范围中的列表中输出列表,为作为用户input 。所以,

input = 5.5:4.4:5.7:4.6
output = [5.6,4.3] and [5.7,4.5]

注意:输入由四个浮点数组成,分别为':',我们可以假设上半场是一组5.5:4.4,下半部分是一组5.7:4.6。

我尝试了一下,但我不知道如何在输入范围内输出列表。

L = [['10.2','9.1','G'],['12.9','7.4','H'],['5.6','4.3','G'],['5.8','4.5','G']]
userinput = input("Enter floats:")     #example 5.5:4.4:5.7:4.6
strSeparate = userinput.split(':')     
floatInput = [float(i) for i in strSeparate]   #turn input into float
inputList = [floatInput[:2],floatInput[2:]]    #[[5.5,4.4],[5.7,4.6]]
for line in L:
   for val in inputList:#???

输出格式为:

[[5.6,4.3],[5.7,4.5]]

您可以如下所示。

首先,用户输入在:上分配,值将转换为浮点,并创建迭代器以帮助将值与zip()配对。然后将每个对与L中的范围进行比较。如果其两个值都位于范围的上和下值之间,则一对位于该范围内。在该范围内的任何对都添加到results列表中。

L = [['10.2','9.1','G'],['12.9','7.4','H'],['5.6','4.3','G'],['5.8','4.5','G']]
inputs = [float(s) for s in '5.5:4.4:5.7:4.6'.split(':')]
it = iter(inputs)
results = []
for pair in zip(it, it):
    for line in L:
        if line[2] == 'G':
            upper = float(line[0])
            lower = float(line[1])
            if ((lower <= pair[0] <= upper) and
                (lower <= pair[1] <= upper)):
                results.append([upper, lower])
print(results)

这将输出:

[[5.6,4.3],[5.8,4.5]]

请注意,如果有多个输入对属于一个范围,则此代码将在results中包含重复值。如果不想要这一点,则可以使用set而不是list用于results,然后将元组添加到集合中(因为列表不可用(。

也假定L中每个子列表的上限和下限是按顺序(上下(。如果不是这样,您可以这样做:

            upper = float(line[0])
            lower = float(line[1])
            lower, upper = lower, upper if lower <= upper else upper, lower

使用 numpy.arange(( numpy.any(( <</em> funcions:

import numpy as np
L = [['10.2','9.1','G'],['12.9','7.4','H'],['5.6','4.3','G'],['5.7','4.5','G']]
userinput = "5.5:4.4:5.7:4.6"     #example 5.5:4.4:5.7:4.6
floatInput = [float(i) for i in userinput.split(':')]   #turn input into float
result = []
for i in (floatInput[0:2], floatInput[2:]):
    r = np.arange(i[1], i[0], 0.1)   # generating float numbers range
    items = [l[0:2] for l in L
             if isinstance(np.any([r[r >= float(l[0])], r[r >= float(l[1])]]), np.ndarray)
             and l[0:2] not in result]
    if (items): result.extend(items)
print(result)

输出:

[['5.6', '4.3'], ['5.7', '4.5']]

最新更新