gpt4 book ai didi

用于创建多个列表的 Python 列表推导

转载 作者:IT老高 更新时间:2023-10-28 21:14:47 25 4
gpt4 key购买 nike

我想创建两个列表 listOfAlistOfB 来存储另一个列表中 AB 的索引秒。

s=['A','B','A','A','A','B','B']

输出应该是两个列表

listOfA=[0,2,3,4]
listOfB=[1,5,6]

我可以用两条语句做到这一点。

listOfA=[idx for idx,x in enumerate(s) if x=='A']
listOfB=[idx for idx,x in enumerate(s) if x=='B']

但是,我只想使用列表推导在一次迭代中完成。是否可以在单个语句中完成?类似于 listOfA,listOfB=[--code 在这里--]

最佳答案

列表推导式的定义是生成一个列表对象。您的 2 个列表对象甚至具有不同的长度;你必须使用副作用来实现你想要的。

这里不要使用列表推导。只需使用普通循环:

listOfA, listOfB = [], []

for idx, x in enumerate(s):
target = listOfA if x == 'A' else listOfB
target.append(idx)

这让您只需要执行 一个 循环;这将击败任何两个列表推导,至少直到开发人员找到一种方法使列表推导构建一个列表的速度是使用单独的 list.append() 调用的循环的两倍。

我会在任何一天都选择这个而不是嵌套列表理解只是以便能够在一行上生成两个列表。作为Zen of Python状态:

Readability counts.

关于用于创建多个列表的 Python 列表推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21023482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com