Python中如何从嵌套列表拆分出x、y两个独立列表?
提取x、y列表的简便方法
嘿,这问题很常见,我给你两种超简便的方法来提取你要的x和y列表!
首先先纠正下你代码里的小问题:你现在是在循环里每次都初始化averagelist = [],所以每次append后得到的都是只包含一个子列表的列表,然后打印出来。正确的做法应该是把averagelist = []放在循环外面,这样循环过程中会不断把新的[num-Delta, average]添加到同一个列表里,最终得到一个完整的大列表,比如:
# 初始化放在循环外面 averagelist = [] # 假设这是你的循环(比如遍历num-Delta的不同值) for ...: average = sum(result.expect[0])/len(t) averagelist.append([num-Delta, average]) # 循环结束后再打印,得到完整的列表 print(averagelist)
这样最终的averagelist就是像这样的结构:
[ [-50, 0.99994894092412567], [-45, 0.9999371327219414], [-40, 0.99992064521708557], # ... 其他所有元素 [0, 0.50250021597634276] ]
接下来就可以用两种方法提取x和y:
方法1:列表推导式(直观易懂)
直接遍历大列表,分别取出每个子列表的第0位和第1位:
x = [item[0] for item in averagelist] y = [item[1] for item in averagelist]
运行后x就是[-50, -45, -40, ..., 0],y就是对应的所有平均值。
方法2:用zip(*...)(更简洁)
Python的zip函数可以把多个可迭代对象“打包”,加上*可以把大列表拆成多个子列表作为参数传入,然后直接解包成x和y:
x, y = zip(*averagelist) # 如果需要列表类型(zip返回的是元组),再转成列表: x = list(x) y = list(y)
至于你之前用extend没得到想要的结果,是因为你当时每次append的是[[num-Delta, average]](一个包含子列表的列表),用extend的话会把这个子列表直接展开添加到averagelist里,导致最终列表变成[-50, 0.999..., -45, 0.999..., ...]这种扁平结构,没法直接按位置提取x和y,所以还是用append单个子列表的方式更合适~
内容的提问来源于stack exchange,提问作者Alicia Fallows
相关产品推荐
相关产品推荐

