概括整个列表的公式

时间:2018-11-20 20:07:09

标签: python list numpy matrix

我想这样做

firstdates = dates[0]
paystring = []
for i in range(len(payment_months)):
    if payment_months[i] < firstdates[i]:
        paystring.append(0)
    else:
        paystring.append(((payment_months[i] + 12 - firstdates[i]) + 1) % 12)
print(paystring)

但是我想对所有日期(列表列表)执行此操作。例如,让我们只关注日期的前两行。

print(dates[0:2])

给我

[[8, 8, 7, 7, 6, 5, 4, 4, 11, 10, 10, 8], [7, 6, 3, 2, 2, 2, 1, 0, 11, 10, 10, 9]]

print(payment_months)

给我

[8, 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, 9]

然后运行此命令:

paystring = []
for i in range(len(payment_months)):
    paystring.append([])
    for j in range(len(dates[i])):
        if payment_months[i] < dates[i][j]:
            paystring[i].append(0)
        elif NDD_day[j] > 1:
            paystring[i].append((payment_months[i] + 12 - dates[i][j]) % 12)
        else:
            paystring[i].append( ((payment_months[i] + 12 - dates[i][j]) + 1) % 12)
print(paystring[0:2])

我应该得到这个:

[[1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 2], [2, 2, 4, 4, 3, 2, 2, 2, 2, 2, 1, 1]]

但是我得到了这个:

[[0, 0, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0], [0, 1, 4, 5, 5, 5, 6, 8, 0, 0, 0, 0]]

有人可以帮我修复我的代码吗?

这是一个手写的例子,应该很清楚:

enter image description here

我尝试将代码更改为此:

# Calculate paystring
paystring = []
for i in range(len(payment_months)):
    paystring.append([])
    for j in range(len(dates[i])):
        if payment_months[i] < dates[j][i]:
            paystring[i].append(0)
#         elif NDD_day[j] > 1:
#             paystring[i].append((payment_months[i] + 12 - dates[j][i]) % 12)
        else:
            paystring[i].append( ((payment_months[i] + 12 - dates[j][i]) + 1) % 12)
print(paystring[0:2])

这给了我这个:

[[1, 2, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1], [0, 2, 0, 0, 0, 2, 0, 0, 1, 1, 0, 1]]

希望这会有所帮助,但我不确定为什么这会造成混淆,也许我并没有最好地解释这一点。

1 个答案:

答案 0 :(得分:1)

经过一段时间的摆弄,最终变得很明显,您为payment_months使用了错误的索引,并且如果想要{{1 }}。

设置:

range

那么我们有:

dates

输出:

In [35]: dates

Out[35]:
[[8, 8, 7, 7, 6, 5, 4, 4, 11, 10, 10, 8],
 [7, 6, 3, 2, 2, 2, 1, 0, 11, 10, 10, 9]]

In [37]: payment_months
Out[37]: [8, 7, 6, 5, 4, 3, 2, 1, 12, 11, 10, 9]

根据需要。

您实际上可以通过使用一些Python语言来完全避免该问题(避免使用索引,只使用access元素)。这也使我们更清楚地知道paystring = [] for i in range(len(dates)): # len(payment_months) -> len(dates) paystring.append([]) for j in range(len(dates[i])): if payment_months[j] < dates[i][j]: # Switched from i to j paystring[i].append(0) else: paystring[i].append( ((payment_months[j] + 12 - dates[i][j]) + 1) % 12) # Switched from i to j 中的每一行与In [42]: paystring Out[42]: [[1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 2], [2, 2, 4, 4, 3, 2, 2, 2, 2, 2, 1, 1]] 一对一对应:

dates

HTH。