Python - 更改列表项的值

时间:2018-05-18 13:07:12

标签: python arrays error-handling

因为你能够接受,我对python相当新,并想知道如何更改列表项的值。我的代码如下所示,带有注释。它运行正常,直到更改列表项的值,即data [x] [y] = something。

Tdata = cursor.fetchall() #Get data from MYSQL database
data = list(Tdata) #Convert into list...not sure if absolutely required
APIData = APIDataList()
MPLlat = 0.0
MPLLon = 0.0
RadiusOI = 15

for i in (range(0,len(data))):
    MPLCount = 0
    MPLlat = data[i][2]
    MPLLon = data[i][3]
    MPLCount = CountofbikesnearMPL(MPLlat, MPLLon, RadiusOI)
    if MPLCount>0:
        data[i][4] = MPLCount #ERROR: here is where the error is kicking in. 
                              #get error "tuple' object does not support 
                              #item assignment"

我真的无法弄清楚为什么会发生这种情况并尝试使用谷歌搜索却没有成功。任何帮助都将深表感谢。

提前致谢。 CELO

2 个答案:

答案 0 :(得分:2)

cursor.fetchall() returns a list of tuples

这意味着data[i]将是tuple,根据定义,它是不可变的。如果您想修改data[i],则需要将元组转换为列表

data = [list(row) for row in Tdata]

或通过元组连接替换整行

data[i] = data[i][:4] + (MPLCount,) + data[i][5:]

答案 1 :(得分:0)

使用for i, elem in enumerate(data): # MPLCount = 0 - I suppose it is unnecessary since you overwrite the value below MPLlat = elem[2] MPLLon = elem[3] MPLCount = CountofbikesnearMPL(MPLlat, MPLLon, RadiusOI) if MPLCount > 0: data[i] = elem[:4] + (MPLCount,) + elem[5:] 编写它可能更清晰:

ThisWay

您是否有理由将变量和函数命名为this_way?如果没有,那么按照PEP8并将其命名为{{1}}会更好。无论如何要保持一致,不要将两种风格混合在一起。