我有一个列表列表(每次运行代码时创建的列表数量作为参数传递),并且在每个列表中,我需要遍历x中第二个列表中每个列表的项列表数量。
简化格式为:
list = [[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [7, 8, 9]], [[1, 2, 3], [10, 11, 12]]]
我需要遍历列表进行(4 + 7 + 10),(5 + 8 + 11)和(6 + 9 + 12)。
我在编写此代码方面没有太大进展,目前我只是将第二个列表中的每个项目加在一起:
mean_list = []
for i in list1:
each_item = 0
for ca in i[1]:
each_item += ca
mean_list.append(each_item)
print(mean_list)
使用上面的示例,最终结果应为mean_list = [21, 24, 27]
。
答案 0 :(得分:1)
一些理解,求和和压缩魔术:
>>> i = [[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [7, 8, 9]], [[1, 2, 3], [10, 11, 12]]]
>>> q = [x[1] for x in i]
>>> [sum(i) for i in zip(*q)]
[21, 24, 27]
要获取平均值,请除以长度:
>>> [sum(i)/len(i) for i in zip(*q)]
[7.0, 8.0, 9.0]
答案 1 :(得分:1)
您可以使用以下list comprehension。第一个zip是在每个子列表中选择第二个列表,第二个是从这些元素中插入元素,以便简单地使用sum
和mean
:
from statistics import mean
sums, means = zip(*[(sum(i), mean(i)) for i in zip(*list(zip(*l))[1])])
print(sums)
# (21, 24, 27)
print(means)
# (7, 8, 9)
答案 2 :(得分:0)
我不知道确切的目的是什么,但是经过严格的编码,我们可以做到这一点。
l = [[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [7, 8, 9]], [[1, 2, 3], [10, 11, 12]]]
mean_list = []
for i in range(len(l[0][0])):
mysum = 0
for j in l:
mysum+=j[1][i]
mean_list.append(mysum)
print(mean_list)
输出
[21, 24, 27]
答案 3 :(得分:0)
这看起来像张量。您可以使用type Record struct {
Name string `json:"student_name"`
Number uint32 `json:"student_number"`
DOB string `json:"student_dob"`
Email string `json:"student_email"`
}
type ID struct {
Record Record
}
...
var records map[string]ID
err := json.Unmarshal(jsonFile, &records)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%#v\n", records)
进行矩阵加法,它比任何手动作业都快得多。
numpy
答案 4 :(得分:0)
您可以用numpy sum轻松地做到这一点。
import numpy as np
list1 = [[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [7, 8, 9]], [[1, 2, 3], [10, 11, 12]]]
result = np.array(list1).sum(axis = 0)[1]
print(result)
#array([21, 24, 27])
编辑:对于均值,正如OP显然想要的那样,只需将求和运算更改为均值即可。
result_mean = np.array(list1).mean(axis = 0)[1]
#array([7., 8., 9.])
答案 5 :(得分:0)
您可以在列表理解中使用双zip
:
l = [[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [7, 8, 9]], [[1, 2, 3], [10, 11, 12]]]
[sum(j) for num, i in enumerate(zip(*l))
for j in zip(*i) if num % 2]
# [21, 24, 27]
如果您需要平均值,请使用statistics.mean()
而不是sum
。