如何同时遍历多个列表

时间:2019-03-03 19:41:35

标签: python

我有一个列表列表(每次运行代码时创建的列表数量作为参数传递),并且在每个列表中,我需要遍历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]

6 个答案:

答案 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是在每个子列表中选择第二个列表,第二个是从这些元素中插入元素,以便简单地使用summean

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