You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python绘图报错TypeError:列表索引需为整数/切片而非元组求解决

解决TypeError: list indices must be integers or slices, not tuple问题

咱们先来揪出这个错误的根源:
你用zip(etiquet, divisasIndica)的时候,每次循环拿到的j是一个元组(比如第一次循环j是('EUR', df1),第二次是('USD', df1))。但你后面写了pares[j]和div[j],这就相当于用元组去当列表的索引——Python列表只认整数或者切片当索引,自然就给你抛出TypeError了。

其实zip已经帮你把标签和对应的DataFrame一一配对好了,直接在循环里把元组解包就行,根本不用再通过索引去取。下面是修正后的完整代码:

import plotly.graph_objects as go  # 记得先导入plotly哦

etiquet=['EUR','USD'] 
divisasIndica=[df1, df1] 

def ch1(div, pares): 
    # 直接解包zip返回的元组,拿到标签和对应的DataFrame
    for etiqueta, dfm in zip(div, pares): 
        fig = go.Figure(data=[go.Candlestick(
            x=dfm['Date'], 
            open=dfm['Open'], 
            high=dfm['High'], 
            low=dfm['Low'], 
            close=dfm['Price']
        )]) 
        fig.update_layout(
            title=etiqueta, 
            yaxis_title='Px', 
        ) 
        fig.show() 

ch1(etiquet, divisasIndica)

几个关键修改点:

  • 把for j in zip(div,pares):改成for etiqueta, dfm in zip(div, pares):,直接从配对里取出标签和数据框,省去索引操作
  • 移除了没用的dtm=pares[j]代码,直接用解包后的dfm和etiqueta
  • 补充了plotly的导入语句(如果你的代码里已经有了可以忽略)

如果你非要用索引的方式循环,也可以用enumerate,比如:

def ch1(div, pares): 
    for idx in range(len(div)): 
        etiqueta = div[idx]
        dfm = pares[idx]
        # 后面的绘图代码和上面一样

不过显然用zip解包的方式更简洁直观~

内容的提问来源于stack exchange,提问作者Pedro Puertas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:32:13