如何使用Python列表推导式将单列表元素分配至多个独立列表
优雅实现单个列表值分配到多个独立列表的解决方案
我明白你想要的效果:每次从features_time_domain获取一个包含4个数值的列表(对应均值、标准差、最大值、最小值),然后分别将这4个值追加到mean_list、std_list、max_list、min_list这四个独立列表中,同时希望代码简洁优雅,避免重复写4次append。
问题出在哪?
你原来用列表推导式的写法[x.append(y) for x,y in zip(feature_lists, features)]本身逻辑是对的,但从你的实际输出来看,大概率是循环执行时的细节出错:比如你可能不小心把整个features列表(而不是单个值)追加到了mean_list,或者feature_lists的初始化有问题(比如不是四个独立的空列表),也有可能每次循环中features的结构不符合预期。
正确的优雅实现方式
首先确保四个目标列表是独立初始化的空列表:
mean_list = [] std_list = [] max_list = [] min_list = []
然后在每次获取features后,用一个简单的for循环(比列表推导式更清晰,因为我们是做副作用操作,不是生成新列表)完成分配:
# 每次获取特征值 features = features_time_domain(values, column_name) # 配对目标列表和特征值,逐个追加 for target_list, value in zip([mean_list, std_list, max_list, min_list], features): target_list.append(value)
如果坚持要用列表推导式(虽然不推荐用推导式做纯副作用操作,但语法上是可行的),可以写成:
[lst.append(val) for lst, val in zip([mean_list, std_list, max_list, min_list], features)]
但注意:这种写法会生成一个全是None的列表(因为append返回None),如果不需要这个列表,用普通for循环更合适。
验证效果
按照这个写法,每次循环后:
features[0]会被追加到mean_listfeatures[1]会被追加到std_listfeatures[2]会被追加到max_listfeatures[3]会被追加到min_list
最终就能得到你预期的输出格式:每个目标列表对应一类特征的所有历史值。
内容的提问来源于stack exchange,提问作者Marcusnh




