如何在python中从列表的目录中添加元素
给我一本清单字典如何在python中从列表的目录中添加元素,python,Python,给我一本清单字典 vd = {'A': [1,0,1], 'B':[-1,0,1], 'C':[0,1,1]} 我想添加lists元素。所以我想将列表A的第一个元素添加到列表B的第一个元素,反之亦然 复杂的是,你不能依赖于标签是A,B,C。它可以是任何东西。其次,词典的长度也是可变的。这里是3。但可能是30岁 我需要的结果是一个列表[0,1,3]所以您只想将所有的值按元素相加 [zip中l的总和(*vd.values())]简而言之: >>> map(sum, zip(*vd
vd = {'A': [1,0,1], 'B':[-1,0,1], 'C':[0,1,1]}
我想添加lists元素。所以我想将列表A的第一个元素添加到列表B的第一个元素,反之亦然
复杂的是,你不能依赖于标签是A,B,C。它可以是任何东西。其次,词典的长度也是可变的。这里是3。但可能是30岁
我需要的结果是一个列表[0,1,3]所以您只想将所有的值按元素相加
[zip中l的总和(*vd.values())]
简而言之:
>>> map(sum, zip(*vd.values()))
[0, 1, 3]
解释 给一本字典:
>>> vd = {'A': [1,0,1], 'B': [-1,0,1], 'C': [0,1,1]}
我们可以:
然后,他们站起来:
请注意,zip
压缩每个参数;不需要列出一张清单就可以了。因此,我们需要*
将列表解压为参数
如果我们只有一份清单,我们可以:
但是,我们有多个,因此我们可以:
总而言之:
>>> map(sum, zip(*vd.values()))
[0, 1, 3]
延伸到平均值而不是总和 这种方法也易于扩展;例如,我们可以很容易地使元素平均,而不是求和。为此,我们首先制作一个
average
函数:
def average(numbers):
# We have to do the float(...) so it doesn't do an integer division.
# In Python 3, it is not necessary.
return sum(numbers) / float(len(numbers))
然后用average
替换sum
:
>>> map(average, zip(*vd.values()))
[0.0, 0.3333, 1.0]
我在没有*的情况下试过这个。神奇的是,zip()中的*比被接受的怪异地图解决方案要清晰得多。我会用这个解决方案来引导,然后解释它。你能代替求和找到平均值吗?@MySchizoBuddy:当然!我会把它添加到我的答案中;请稍等。@icktoofay您可以使用另一种(更详细的)好的解决方案,而不是
float
来代替sum(数字,0.0)
或运算符。您可能想补充一点,它将修改第一个元素,而my和nneonneo的解决方案不会!编辑我的代码,使其不会更改vd
。
>>> map(sum, zipped)
[0, 1, 3]
>>> map(sum, zip(*vd.values()))
[0, 1, 3]
def average(numbers):
# We have to do the float(...) so it doesn't do an integer division.
# In Python 3, it is not necessary.
return sum(numbers) / float(len(numbers))
>>> map(average, zip(*vd.values()))
[0.0, 0.3333, 1.0]
vd = {'A': [1,0,1], 'B':[-1,0,1], 'C':[0,1,1]}
vd_keys = list(vd.keys())
rt = vd[vd_keys.pop()].copy() # copy otherwise rt and vd[vd_keys.pop()] will get synced
for k in vd_keys:
for i in range(len(rt)):
rt[i] += vd[k][i]
print(rt)