You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python列表推导式将单列表元素分配至多个独立列表

优雅实现单个列表值分配到多个独立列表的解决方案

我明白你想要的效果:每次从features_time_domain获取一个包含4个数值的列表(对应均值、标准差、最大值、最小值),然后分别将这4个值追加到mean_liststd_listmax_listmin_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_list
  • features[1]会被追加到std_list
  • features[2]会被追加到max_list
  • features[3]会被追加到min_list

最终就能得到你预期的输出格式:每个目标列表对应一类特征的所有历史值。

内容的提问来源于stack exchange,提问作者Marcusnh

火山引擎 最新活动