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

2024-09-27 00:19:33 发布

您现在位置: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会将输入的数目与用户输入范围内的list-of-list中的值进行比较,输入范围为type'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]]

Tags: 用户in内容列表forinputtype字母
2条回答

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

您可以按如下所示操作。你知道吗

首先,在:上拆分用户输入,将值转换为浮点值,并创建一个迭代器来帮助将值与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

相关问题 更多 >

    热门问题