0

大家好,我有一个从函数计算的列表

ab = (x, x1, x2, x3, x4, x5, x6, x7, x8)

其中 x、x1 等是根据距离方程计算的浮点数。有什么方法可以获取列表中的每个浮点值并将它们与已知值进行比较。IE

knowndistance = 200

如果该值大于已知距离,则打印大于,如果小于,则打印小于。然后我想收集所有小于和大于结果并将它们放入两个单独的列表中,一个是大于 [],另一个是小于 []

所以我想比较 ab 中的所有值,看看它们是否大于可以为我执行此操作的任何代码,而不是为每个语句键入 if。我当前的代码在下面,但这不适用于浮点数?

new_list = []
for i, x in enumerate(ab):
  if x < knowndistance:
    lessthan = "Station {} average is less than {}".format(i+1, knowndistance)


comicdb = []

record = {}
record = lessthan
comicdb.append(record)
new_list.extend(comicdb)

提前感谢您的帮助:)

4

2 回答 2

0

列表推导可以快速为您提供一组过滤的值:

lessthan = [v for v in ab if v < knowndistance]
greaterthan = [v for v in ab if v >= knowndistance]

或使用循环来划分值:

lessthan, greaterthan = [], []
for v in ab:
    if v < knowndistance:
        lessthan.append(v)
    else:
        greaterthan.append(v)

请注意,这里greaterthan是严格greater then or equal to的,但如果您需要忽略任何完全等于 的值,您可以加强测试knowndistance

于 2013-05-30T07:56:24.933 回答
0

如果您需要经常在代码中搜索键,建议对数据进行预排序,并执行二进制搜索。根据查找频率和输入数据的长度,这将是有效的

>>> import bisect
>>> import random
>>> ab = [random.random()*100 for _ in range(20)]
>>> ab = sorted(ab)
>>> knowndist = 50
>>> index = bisect.bisect_left(ab, knowndist)
>>> left = ab[:index]
>>> right = ab[index:]
>>> left
[0.7247004541477753, 4.854550484568454, 5.07097854581271, 5.768240615684894, 39.99461725759485]
>>> right
[61.05798332602631, 62.49927871117734, 64.18742114760279, 64.33592616994855, 67.47713405587675, 69.82614000336153, 70.8239641304042, 73.52120950142177, 76.36583812405388, 77.21433592853452, 80.63221055514911, 82.32348252610743, 91.75223944014984, 95.04315728608329, 99.04521000455324]
于 2013-05-30T08:12:05.057 回答