循环列表部门列表

时间:2017-06-25 06:16:06

标签: python python-3.x

如果我有一个列表列表,例如,

[[1, 2, 3], [4, 5, 6], [7, 8, 9], [0,0,0]]

如何输出列表列表,以便将每个元素指定为子列表总和的一部分。

在此示例中,输出应为:

[[1/6, 2/6, 3/6], [4/15, 5/15, 6/15], [7/24, 8/24, 9/24], [0,0,0]]

并且还应该检查除零,在这种情况下,条目只是零。

4 个答案:

答案 0 :(得分:2)

您可以使用子列表的sum

l =  [[1,2,3],[4,5,6],[7,8,9]]
res = [map(lambda x: float(x)/sum(sl), sl) for sl in l]

结果

[[0.16666666666666666, 0.3333333333333333, 0.5], 
 [0.26666666666666666, 0.3333333333333333, 0.4], 
 [0.2916666666666667, 0.3333333333333333, 0.375]]

PS,
对于,{map(...)不返回列表,而是返回map对象1。获取清单:

res = [list(map(lambda x: float(x)/sum(sl), sl)) for sl in l]

PPS,
为避免除以零,您可以使用条件表达式替换分母:sum(sl) if sum(sl) else 1

[list(map(lambda x: float(x)/(sum(sl) if sum(sl) else 1), sl)) for sl in l]

答案 1 :(得分:0)

使用以下几种理解:

代码:

[[float(z)/sum(x) for z in x] for x in y]

测试代码:

y = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

print([[float(z)/sum(x) for z in x] for x in y])

结果:

[   [0.16666666666666666, 0.3333333333333333, 0.5], 
    [0.26666666666666666, 0.3333333333333333, 0.4], 
    [0.2916666666666667, 0.3333333333333333, 0.375]
]

答案 2 :(得分:0)

可以使用列表理解来完成以下操作:

vals = [[1,2,3],[4,5,6],[7,8,9]]
denoms = [sum(entries) for entries in vals]
fracs = [[Fraction(entry, denom) for entry in entries] for entries, denom in zip(vals, denoms)]
floats = [[entry/denom for entry in entries] for entries, denom in zip(vals, denoms)]

这里我首先将分母计算为各个子列表的总和,然后将子列表中的每个元素与它们各自的分母分开。

另外,我以小数(fracs)和小数(floats)形式给出输出。选择适合您需求的。

答案 3 :(得分:0)

我们走了:

list=[[1,2,3],[4,5,6],[7,8,9]] 
newList=[]
subList=[]
for el in list:
    for subEl in el:
        subList.append(subEl/sum(el))
    newList.append(subList)
    subList=[]
print(newList)   

输出是:

  

[[0.16666666666666666,0.3333333333333333,0.5],[0.26666666666666666,0.3333333333333333,0.4],[0.2916666666666667,0.3333333333333333,0.375]]