如果我有一个列表列表,例如,
[[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]]
并且还应该检查除零,在这种情况下,条目只是零。
答案 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,
对于python-3.x,{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]]