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