基于8位数字日期串同步排序多列表的代码问题排查求助
问题出在zip对象的特性上!
嘿,我一眼就看到问题所在啦——在Python 3里,zip()函数返回的是一个迭代器对象,而不是可直接排序的列表。你直接调用AB.sort()根本没法对它做排序操作,这就是代码没效果的核心原因!
不过别担心,只需要加一步转换就能搞定,而且你的整体思路是对的:把四个列表打包后按日期排序,再拆分回原列表。这里的日期字符串是8位数字格式(比如20200329),直接按字符串排序和按日期排序的结果是一致的,所以不需要额外做日期格式转换,这点你选的格式很省心~
修正后的代码如下:
import sys # 假设你的ts、fs、ps、fz已经正确加载了数据 f = open(sys.argv[4], "w") # 关键:把zip对象转成列表,这样才能排序 AB = list(zip(ts, fs, ps, fz)) # 按元组第一个元素(也就是日期串)排序,默认升序 AB.sort() # 拆分回原列表 ts[:] = [t[0] for t in AB] fs[:] = [t[1] for t in AB] ps[:] = [t[2] for t in AB] fz[:] = [t[3] for t in AB] # 之后你可以继续处理写入文件的逻辑
简单解释下:
- 用
list(zip(...))把迭代器转换成可操作的列表,这样sort()方法才能生效 - 元组排序默认会按第一个元素的值来排序,正好对应你的日期列表
ts,排序后其他三个列表的元素会自动跟着日期的位置同步调整 - 用
ts[:] = ...这种方式是在原列表上修改,而不是创建新列表,能保证后续对这些列表的引用都是更新后的内容
内容的提问来源于stack exchange,提问作者Mario Keulertz
相关产品推荐
相关产品推荐

