Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 显示输入浮动范围内列表列表列表中的可能元素_Python_List - Fatal编程技术网

Python 显示输入浮动范围内列表列表列表中的可能元素

Python 显示输入浮动范围内列表列表列表中的可能元素,python,list,Python,List,假设我有一个列表,其中包含: 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会将

假设我有一个列表,其中包含:

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会将输入的数量与用户输入范围内的列表中的值进行比较,类型为“G”

因此,python将从列表中输出列表,列表中的数字在范围内,作为用户输入。所以

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
中的范围进行比较。如果一对的两个值都位于范围的上限值和下限值之间,则该对位于范围内。位于该范围内的任何对都将添加到
结果
列表中

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)
使用和函数的解决方案:

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']]

您能解释一下您期望的输出格式吗?
5.8
超出范围(
5.5:4.4:5.7:4.6
)。为什么结果会这样?@RomanPerekhrest抱歉,我错了。我在最近的编辑中更正了它。再次,
4.3
超出范围
5.5:4.4:5.7:4.6
。否则,如果任何数量的嵌套数组在用户范围内,则应将其视为搜索
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']]