我根据每位用户的平均收入(ARPU),保证金以及客户保留客户的年数(ltvYears)编写了一个简单的脚本来模拟客户终身价值(LTV)。下面是我的脚本。它在此行抛出错误“ltvYears = ltvYears + [ltv_loop]”。错误消息是“TypeError:只能将元组(不是”列表“)连接到元组”。有人能告诉我是什么原因引起的吗?我怀疑问题可能源于“ltvYears =('f',[])”我添加了类型代码以消除另一个错误(将浮点乘以int)。
我是Python的新手,所以在这段代码中很可能会出现初学者错误。
lowYears = 0
highYears = 20
modeYears = 3
ARPU = 65.0*12.0
MARGIN = .30
ltvYears = ('f',[])
ltv = []
def ltv(arpu, years, margin):
return arpu * years * margin
N = 10000
for n in range(N):
#estimate LTV
ltv_loop = random.triangular(lowYears, highYears, modeYears)
ltvYears = ltvYears + [ltv_loop]
ltv = ltv + [ltv(ARPU, ltvYears, MARGIN)]
show = 0
if (show==1):
#plot ltv histogram
plt.hist(ltv,bins=10)
plt.title("LTV Probability Density")
plt.xlabel("")
plt.ylabel("$")
plt.show()
编辑 - 这是我的变量的屏幕截图。
EDIT2 ---由于下面的帮助,我找到了解决方案。共有三个问题:
+1 @DonCallisto和@RikPoggi获取有关第2项和第3项的帮助
答案 0 :(得分:10)
ltvYears
是一个元组,它被定义为
ltvYears = ('f',[])
所以说到这一行:
ltvYears = ltvYears + [ltv_loop]
Python不知道该怎么做,因为你的错误明确告诉我们:
“TypeError:只能将元组(不是”list“)连接到元组”
不清楚该行的行为应该是什么,因此很难提出解决方案。
也许您只需要将ltvYears定义为list
并调用.append
方法。
ltvYears = ('f',[])
我添加了'f'
来表示该数组要包含浮点数。在我这样做之前,我得到了关于乘法浮点数和整数的错误。
你不需要这样做。 Python不是C。
只是做:
ltvYears = []
以后:
ltvYears.append(ltv_loop)
答案 1 :(得分:5)
如果ltvYears是一个元组,那么你可以这样连接:
ltvYears += (ltv_loop,)
答案 2 :(得分:2)
从您的代码中
ltvYears = ltvYears + [ltv_loop]
ltvYears
是一个元组,这就是你得到错误的原因。
那是因为你不能将list
附加到元组。也许您必须更改ltvYears
的类型,使其成为列表
答案 3 :(得分:2)
(这与你所询问的问题不同,请参阅@ Rik的回答,但你也遇到了这个问题)
您已定义了一个与变量同名的函数:
...
ltv = []
def ltv(arpu, years, margin):
return arpu * years * margin
...
这将用函数对象替换你的列表变量,当然你无法追加,所以这一行会失败:ltv = ltv + [ltv(ARPU, ltvYears, MARGIN)]
。
答案 4 :(得分:0)
它实际上就像错误消息所说的那样简单:不允许连接列表和元组。
ltvYears
是一个元组。 [ltv_loop]
是一个列表。