Python中提取嵌套列表子列表元素并解决TypeError报错问题
解决嵌套列表拆分的报错问题
嘿,我来帮你搞定这个问题!首先咱们先搞清楚你为啥会报错:
你写的双层循环里,内层的i其实是子列表里的单个元素——比如第一个子列表里的1633425661439或者0.11643042583898743,这些都是整数或浮点数类型,根本不能用i[0]这种下标方式去访问,这就是TypeError: 'int' object is not subscriptable报错的根源。
接下来给你几种正确的实现方式:
方式一:单层循环(最直观)
先初始化两个空列表,然后遍历原列表的每个子列表,直接提取对应位置的元素:
# 注意:尽量不要用list作为变量名,它是Python内置类型 original_list = [[1633425661439, 0.11643042583898743], [1633428739018, 0.11682454707026001], [1633432086311, 0.11950356856187618]] new_list1 = [] new_list2 = [] for sub_list in original_list: new_list1.append(sub_list[0]) new_list2.append(sub_list[1]) print(new_list1) print(new_list2)
运行后就能得到你想要的两个列表啦。
方式二:列表推导式(更Pythonic)
如果想让代码更简洁,可以用列表推导式一行搞定:
original_list = [[1633425661439, 0.11643042583898743], [1633428739018, 0.11682454707026001], [1633432086311, 0.11950356856187618]] new_list1 = [sub[0] for sub in original_list] new_list2 = [sub[1] for sub in original_list]
这种写法既简洁又易读,很适合处理这类简单的列表转换需求。
方式三:用zip函数快速拆分
如果你想一次性完成拆分,zip函数是个好选择:
original_list = [[1633425661439, 0.11643042583898743], [1633428739018, 0.11682454707026001], [1633432086311, 0.11950356856187618]] new_list1, new_list2 = zip(*original_list) # 注意zip返回的是元组,如果你需要列表类型,转一下就行 new_list1 = list(new_list1) new_list2 = list(new_list2)
这种方式效率很高,尤其当原列表元素很多的时候优势更明显。
另外提醒一下:尽量不要用list作为变量名哦,它是Python的内置类型,用它做变量名会覆盖掉内置功能,容易引发其他问题~
内容的提问来源于stack exchange,提问作者Luiz Scheuer
相关产品推荐
相关产品推荐

