合并和排序两个数字范围

2024-03-29 15:59:10 发布

您现在位置:Python中文网/ 问答频道 /正文

在兰伯特地图投影中计算子午线距离的代码中,我需要将x和x2的距离计算合并到一个简化计算中。你知道吗

x的结果为>;=0
x2的结果为<;=0

如何将x和x2的范围计算合并为一个?最好的结果是从最小的负数开始,以最大的可能数结束,然后输出。你知道吗

我不确定是否可以在这里的输出上使用sorted()。我也可以从结果中列出一个清单,然后打电话给你列表.排序(),但以我的代码知识,我不知道如何正确地编写它。你知道吗

代码如下:

if projection == "L":
    print("Lambert projection")
    s = int(input("Define scale 1:(input)"))
    if s <= 0:
        sys.exit("scale must have higher value than 0")
    v = int(input("Define longitude interval of meridians"))
    if v <= 0:
        sys.exit("Interval must have higher value than 0")
    n = int(input("How many meridians to project? (from center)"))
    if n <=0:
        sys.exit("Number must be higher than 0")
    for v in range(n):
        x = R*(v*n)
        if x/s<100:
            print("meridian will be", x/s, "cm from center")
        else:
            print("meridian will be - cm from center")
    for v in range(n):
        x2 = R*(-v*n)
        print("meridian will be", x2/s, "cm from center")

我现在从range得到的结果是:

meridian will be 0.0 cm from center
meridian will be 1.1467998 cm from center
meridian will be 2.2935996 cm from center
meridian will be 3.4403994 cm from center

meridian will be 0.0 cm from center
meridian will be -1.1467998 cm from center
meridian will be -2.2935996 cm from center
meridian will be -3.4403994 cm from center

预期结果:

meridian will be -3.4403994 cm from center
meridian will be -2.2935996 cm from center
meridian will be -1.1467998 cm from center
meridian will be 0.0 cm from center
meridian will be 1.1467998 cm from center
meridian will be 2.2935996 cm from center
meridian will be 3.4403994 cm from center

Tags: 代码frominputifsysexitcmbe
2条回答

你可以试着用列表来理解。你知道吗

 x = list(map(lambda v: R * (v * n) / s, range(n)))
 x.extend(map(lambda v: R * (-v * n) / s, range(n)))
 x = list(filter(lambda v: v < 100, x))
 x_sorted = sorted(x)

我在这里所做的是使用extend方法,它的工作方式与使用__add__操作符类似,只是extend不创建新的列表,而是向当前列表添加值,这意味着它要快一些。而且,列表理解往往比Python中的for循环快,而且在引导时更容易阅读。你知道吗

因此,如果使用R = 6371.11s = 100000n = 18运行,您应该得到:

[-19.4955966, -18.3487968, -17.201997, -16.0551972, -14.9083974, -13.7615976, -12.6147978, 
 -11.467998, -10.3211982, -9.1743984, -8.0275986, -6.8807988, -5.733999, -4.5871992, 
 -3.4403994, -2.2935996, -1.1467998, 0.0, 0.0, 1.1467998, 2.2935996, 3.4403994, 4.5871992, 
 5.733999, 6.8807988, 8.0275986, 9.1743984, 10.3211982, 11.467998, 12.6147978, 13.7615976, 
 14.9083974, 16.0551972, 17.201997, 18.3487968, 19.4955966]

正如您所猜测的,您只需正常地添加它们,并在列表中转换它们之后对其应用sortedsorted默认情况下按升序排序

# initialize lists at the top of your code,

l1 = [] 
l2 = []

然后你可以在每次迭代中附加到两个列表中

替换

x = R*(v*n)
        if x/s<100:
            print("meridian will be", x/s, "cm from center") 

x = R*(v*n)
        if x/s<100:
            l1.append(x/s)

x2也这样做

最后创建一个排序列表

sorted_list = sorted(l1 + l2)

打印排序列表

for i in sorted_list:
        print("meridan will be {}".format(i))

相关问题 更多 >