首页 > 解决方案 > 基于另一个参考附加

问题描述

我允许使用 Numpy 完成任务。

我需要用两个列表显示一个月的总销售额:日期和销售额。

我的方法是通过从日期中剥离月份、创建 2D 矩阵并添加每个月检查的值来列出一个月内的所有销售额。

import numpy as np

dates = ["02/01/19", "03/02/19"]
sales = ["10.50", "12.20"]
month = [x.strip("0").split("/")[0] for x in dates]
monthsales = np.vstack((month, sales)).astype(np.float)

def monthlysales():
    jan = []
    for i in monthsales[0, 0:]:
        if i == 1:
            jan.append()
    s = input("Pick month: ")
    if s == "1":
        print("Sales total for Jan is:", np.sum(jan), "USD")
    else:
        print("Not a valid month")
    return
print(monthsales)
print(monthlysales())

问题是我不知道要附加什么,以便它占用矩阵的第二行,这将完成代码

标签: pythonnumpy

解决方案


保持逻辑的解决方案:

在这里,我循环遍历月份(就像你做的那样,但在这里使用enumerate),并寻找月份等于 1 的时间。使用enumerate允许我们知道月份等于 1 时的列号(id)。然后只需在我们感兴趣的月份添加销售额(第 1 行)(id

import numpy as np

dates = ["02/01/19", "03/02/19"]
sales = ["10.50", "12.20"]
month = [x.strip("0").split("/")[0] for x in dates]
monthsales = np.vstack((month, sales)).astype(np.float)

def monthlysales():
    jan = []
    # Loop over months with enumerate
    for id, month in enumerate(monthsales[0]):
        if month == 1:
            # Append sales (row 1) at column id
            jan.append(monthsales[1, id])
    s = input("Pick month: ")
    if s == "1":
        print("Sales total for Jan is:", np.sum(jan), "USD")
    else:
        print("Not a valid month")

print(monthsales)
print(monthlysales())

当然,由于您可以使用 numpy,因此您可以完全避免任何循环。考虑以下行:

monthsales[1, monthsales[0] == 1].sum()

这在一行中总结了所有 1 月份的销售额。没有循环。对于任何合理数量的数据,这将比使用enumerate.

看起来更像您可能拥有的初始解决方案:

def monthlysales():
    s = int(input("Pick month: "))
    if s >= 1 and s <= 12:
        monies = monthsales[1, monthsales[0] == s].sum()
        print("Sales total for month {} is {} USD".format(s, monies))
    else:
        print("Not a valid month")

推荐阅读