我想这样做
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]]
有人可以帮我修复我的代码吗?
这是一个手写的例子,应该很清楚:
我尝试将代码更改为此:
# 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]]
希望这会有所帮助,但我不确定为什么这会造成混淆,也许我并没有最好地解释这一点。
答案 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。