TypeError:list indices必须是整数或切片,而不是元组列表的元组

时间:2017-09-18 09:16:16

标签: python list tuples

在尝试从元组列表生成列表时,我得到“列表索引必须是整数或切片,而不是元组”错误。 元组列表具有以下结构:

[(29208, 8, 8, 8), (29209, 8, 8, 8), (29210, 8, 8, 8), (29211, 8, 8, 8)]

元组中的第一个元素是时间序列,其他元素是某些变量的状态。

从元组列表转换为简单列表的循环如下:

TimeAxis = []

for n in lst:
    TimeAxis.append(lst[n][0])

其中lst具有如上所述的格式。 由于某种原因,它会抛出错误:

Traceback (most recent call last):
  File "X:\Temp\XXX_python_graph\RTT_Plot.py", line 30, in <module>
    Time.append(lst[n][0])
TypeError: list indices must be integers or slices, not tuple

我理解这是一个新手问题,但stackoverflow上的其他解决方案不起作用。 提前谢谢。

3 个答案:

答案 0 :(得分:3)

Python的for循环是Foreach construct;你遍历列表的元素,而不是索引。

所以n是来自lst的元组之一,而不是索引。直接使用:

for n in lst:
    TimeAxis.append(n[0])

您可以使用list comprehension

来简化代码
TimeAxis = [tup[0] for tup in lst]

答案 1 :(得分:0)

for n in lst:
    TimeAxis.append(n[0])

当您在列表上进行迭代时,它会逐个获取元素,因此n的值是您的每个元组,只需访问它的0th索引并追加

答案 2 :(得分:0)

让我帮助您了解您的代码出了什么问题:

lst = [(29208, 8, 8, 8), (29209, 8, 8, 8), (29210, 8, 8, 8), (29211, 8, 8, 8)]
for n in lst:  # ns in lst -> (29208, 8, 8, 8), ... , (29211, 8, 8, 8)
    TimeAxis.append(lst[n][0]) # 1st iter: lst[(29208, 8, 8, 8)][0]

因此TypeError。你可能想做的是:

for i in range(len(lst)):  # is in range(len(lst)) -> 0,1,2,3 
    TimeAxis.append(lst[n][0])  # 1st iter: lst[0][0]

即使这样可行,也没有必要。还有更多的pythonic方式,可以在@Martijn Pieters answer中找到。