TypeError:只能将元组(不是"list")连接到元组"

hug*_*dan 8 python

我写了一个简单的脚本来模拟基于每用户平均收入(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()
Run Code Online (Sandbox Code Playgroud)

编辑 - 这是我的变量的屏幕截图. 在此输入图像描述

EDIT2 ---由于下面的帮助,我找到了解决方案.总共有三个问题:

  1. 我错误地将相同的名称分配给变量和函数(+1 @autopopulated用于指出它)
  2. 这一行是无关紧要的"ltvYears = ltvYears + [ltv_loop]"
  3. 该行应使用"ltv_loop"用于第二个参数"ltv = ltv + [calculateltv(ARPU,ltv_loop,MARGIN)]"

+1 @DonCallisto和@RikPoggi获得有关第2项和第3项的帮助

Rik*_*ggi 11

ltvYears 是一个元组,它被定义为

ltvYears = ('f',[])
Run Code Online (Sandbox Code Playgroud)

所以说到这一行:

ltvYears = ltvYears + [ltv_loop]
Run Code Online (Sandbox Code Playgroud)

Python不知道该怎么做,因为你的错误明确告诉我:

"TypeError:只能将元组(不是"列表")连接到元组"

不清楚该行的行为应该是什么,因此很难提出解决方案.

也许你只需要将ltvYears定义为a list并调用该.append方法.


编辑

这里的OP说:

ltvYears = ('f',[])我添加了'f'以指示该数组是否包含浮点数.在我这样做之前,我得到了关于乘法浮点数和整数的错误.

你不需要这样做.Python不是C.

做就是了:

ltvYears = []
Run Code Online (Sandbox Code Playgroud)

然后:

ltvYears.append(ltv_loop)
Run Code Online (Sandbox Code Playgroud)


jed*_*mao 5

如果ltvYears是一个元组,那么你可以像这样连接:

ltvYears += (ltv_loop,)
Run Code Online (Sandbox Code Playgroud)