我们说我有一个包含以下列表的列表:
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]
我尝试了一下,但我不知道如何将范围内的列表输出到输入中。
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]]
答案 0 :(得分:0)
您可以按照以下所示进行操作。
首先,用户输入在:
上拆分,值转换为浮点数,并创建迭代器以帮助将值与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
答案 1 :(得分:0)
使用numpy.arange()和numpy.any()功能的解决方案:
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']]