繁体   English   中英

将元组转换为元素列表

[英]Convert tuple to list of elements

我来自这个问题,优雅地从主列表的子列表中获取信息,提出了一个很好的解决方案(实际上是两个)。

我现在遇到的问题是,给出的答案假设列表中有一定数量的元素(我从未说过元素的数量可以更改,所以这实际上是我的错)才能生成最终列表。

这是代码的MWE

a = [[0,1.1, 0.5, 99,99,0.7], [0,0.3, 1.4,99,99, 0.2], [1,0.6, 0.2,99,99, 1.], [1,1.1, 0.5,99,99, 0.3], [2,0.2, 1.1,99,99, 0.8], [2,1.1, 0.5,99,99, 1.], [3,1.2, 0.3,99,99, 0.6], [3,0.6, 0.4,99,99, 0.9], [4,0.6, 0.2,99,99, 0.5], [4,0.7, 0.2,99,99, 0.5]]

a_processed = []

from collections import defaultdict
nums = defaultdict(list)
for arr in a:
    key = tuple(arr[1:5]) # make the first two floats the key
    nums[key].append( arr[5] ) # append the third float for the given key

a_processed = [[k[0], k[1], k[2], k[3], round(sum(vals)/len(vals),2)] for k, vals in nums.items()]

返回:

a_processed = [[0.7, 0.2, 99, 99, 0.5], [0.3, 1.4, 99, 99, 0.2], [0.6, 0.2, 99, 99, 0.75], [0.6, 0.4, 99, 99, 0.9], [1.2, 0.3, 99, 99, 0.6], [0.2, 1.1, 99, 99, 0.8], [1.1, 0.5, 99, 99, 0.67]]

我想替换最后一行,该行将元素k[0], k[1], k[2], k[3]明确命名为更通用的名称。 我尝试简单地使用:

a_processed = [[k, round(sum(vals)/len(vals),2)] for k, vals in nums.items()]

但这会将k作为元组存储在每个子列表中:

a_processed = [[(0.7, 0.2, 99, 99), 0.5], [(0.3, 1.4, 99, 99), 0.2], [(0.6, 0.2, 99, 99), 0.75], [(0.6, 0.4, 99, 99), 0.9], [(1.2, 0.3, 99, 99), 0.6], [(0.2, 1.1, 99, 99), 0.8], [(1.1, 0.5, 99, 99), 0.67]]

那么,如何在不必显式写下每个元素的情况下将该行概括为任意数量的元素呢?

使用list(k)将元组转换为列表,然后使用需要包含的任何其他元素扩展该列表。

(您可以使用+运算符在python中串联列表。)

a_processed = [list(k) + [round(sum(vals)/len(vals),2)] for k, vals in nums.items()]

如果我的问题正确无误,以下是您的追求。

a_processed = [list(k)[:4] + [round(sum(vals)/len(vals),2)] for k, vals in nums.items()]

+运算符以给定顺序加入2个列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM