gpt4 book ai didi

python - 如何 "slice"一对基于其中一个列表中的值的列表

转载 作者:行者123 更新时间:2023-11-28 19:47:02 25 4
gpt4 key购买 nike

我有两个等长的列表,一个包含标签,另一个包含数据。例如:

labels = ['cat', 'cat', 'dog', 'dog', 'dog', 'fish', 'fish', 'giraffe', ...]
data = [ 0.3, 0.1, 0.9, 0.5, 0.4, 0.3, 0.2, 0.8, ... ]

如何根据 labels 列表中的特定标签并行提取两个列表的子列表?

例如,使用fish作为选择标准,我要生成:

selected_labels = [ 'fish', 'fish' ]
selected_data = [ 0.3, 0.2 ]

我最好的猜测听起来很麻烦 - 制作一个元素级元组列表,从该列表中提取相关元组列表,然后将该元组列表去元组化回两个单个元素列表。即使这是处理它的方法,我对 Python 还是太陌生了,不会偶然发现它的语法。

最佳答案

使用 zip()和一个 generator expression这可以像这样完成:

代码:

tuples = (x for x in zip(labels, data) if x[0] == 'fish')
selected_labels, selected_data = map(list, zip(*tuples))

这是如何运作的?

tuples 行构建了一个 generator expression它将两个列表压缩在一起并删除任何无趣的东西。第二行再次使用 zip,然后根据需要将生成的元组 maplist 中。

这具有不构建中间数据结构的优势,因此应该相当快且内存效率高。

测试代码:

labels = ['cat', 'cat', 'dog', 'dog', 'dog', 'fish', 'fish', 'giraffe']
data = [0.3, 0.1, 0.9, 0.5, 0.4, 0.3, 0.2, 0.8]

tuples = (x for x in zip(labels, data) if x[0] == 'fish')
selected_labels, selected_data = map(list, zip(*tuples))

print(selected_labels)
print(selected_data)

结果:

['fish', 'fish']
[0.3, 0.2]

关于python - 如何 "slice"一对基于其中一个列表中的值的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48739048/

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