在尝试从元组列表生成列表时,我得到“列表索引必须是整数或切片,而不是元组”错误。 元组列表具有以下结构:
[(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上的其他解决方案不起作用。 提前谢谢。
答案 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中找到。