Skip to main content
 首页 » 编程设计

python之类型错误 : "list indices must be integers" looping through tuples in python

2025年05月04日26shanyou

我是 python 新手,所以希望这个问题可以轻松回答。

我正在从 Oracle 11g 中提取一个元组,然后想使用 for 循环从中创建矩阵。但是,我收到一条错误消息:

TypeError: list indices must be integers, not tuple 

我做错了什么?代码如下:

import cx_Oracle 
con = cx_Oracle.connect('xxx') 
print con.version 
cur = con.cursor() 
cur.execute("select zc.latitude, zc.longitude from  orders o, zip_code zc where     o.ship_date> '24-DEC-12' and TO_CHAR(zc.ZIP_CODE)=o.CONSIGNEE_POSTAL_CODE") 
 
output = cur.fetchall() 
cur.close() 
con.close() 
 
latitudes=[] 
longitudes=[] 
 
for i in output: 
    latitudes[i]=output[i][0] 
    longitudes[i]=output[i][1]   

我想要的最终结果是将元组拆分为两个数组,一个包含纬度,一个包含经度。

请您参考如下方法:

您正在遍历结果行,而不是一系列数字。使用 .append() 将项目添加到 latitudes 和 longitudes 中:

for i in output: 
    latitudes.append(i[0]) 
    longitudes.append(i[1])   

for 循环获取output 的每一项并将其分配给变量i,因此i 是结果行元组,而不是整数。如果您重命名变量可能更容易理解:

for row in output: 
    latitudes.append(row[0]) 
    longitudes.append(row[1])   

如果您的结果行每行仅包含 2 列,您还可以使用 zip() 技巧将列拆分为单独的列表:

latitudes, longitudes = zip(*output) 

*output 表示:将 output 中的每个元素作为单独的参数应用于 zip() 内置函数,因此 zip() 通过 zip(output[0], output[1], output[2], ...) 调用。 zip() 从这些单独的行中提取每个元素,并将它们组合到新的输出列表中。每行两列意味着 zip(*output) 产生两个输出列表。