我是 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) 产生两个输出列表。
