对嵌套列表中的元素求和并创建新列表

时间:2020-04-07 14:00:00

标签: python list

我想创建一个新列表。

新列表将包含4个元素。

X = [0, 1, 2, 3] 

4个元素中的每个元素都是更大列表中50个列表的总和。

此较大的列表包含50个元素。在50个嵌套列表中的每个列表中。

每个嵌套列表都有这5个元素

Nestedlist = [str, int, int, float, float] 

['Ohio', 11568495, 11568495, 262851.0, 44824.9]

在这一部分中,我对数据进行了排序,并将50个嵌套列表中的1-4元素更改为整数和浮点数。

这就是我将元素1-4转换为int和float的方式:

for i, sd in enumerate(statesData):  
    sd = sd.strip().split(',')
    if i:  # omit element 0
        sd[1:] = int(sd[1]), int(sd[1]), float(sd[3]), float(sd[4])
    statesData[i] = sd

现在,我想找到嵌套列表中元素1 2 3 4的总和,并创建一个新的列表X(如上所示):

这就是我所拥有的:

sums = []
for e in statesData:
    if e:  
        e = sum(e[1]), sum(e[2]), sum(e[3]), sum(e[4])
        sums.append(e)

输出应如下所示:

sums = [sum all nested lists element 1, sum of nested lists element 2, sum of nested lists element 3, sum of nested lists element 4]

我得到的输出是

unsupported operand type for +: int and str

如何从多个嵌套列表中提取特定元素并加以利用?

如果我想使用列表X中列表1:50的每个元素2

我觉得这应该容易得多。即使我是新手,我也认为这将是一个常见问题。在更大的列表中采用多个列表的相同元素并处理数据。

2 个答案:

答案 0 :(得分:0)

问题在于您的for循环声明,

for e in range(len(statesData)):

如果len(statesData)为4,则在循环运行期间e将为0、1、2、3。但是,代码将e视为列表,在这里多次对其进行索引:

e[1:5] = sum(e[1]), sum(e[2]), sum(e[3]), sum(e[4])

另一个问题是总和,因为它需要一个值列表,而不是单个整数。

如果我能看到statesData的样子,那将会有所帮助。但是,假设您希望以4为单位获取它,则可以执行以下操作...

for e in range(0, len(statesData), 4):
   newVal = sum(statesData[e], statesData[e+1], statesData[e+2], statesData[e+3])
   sums.append(e)

此for循环计数为4,因此e将为0、4、8等。然后,它使用e作为索引来获取4个statesData值。因此,第一个循环获取0、1、2、3并将其求和。然后得到4,5,6,7并求和,依此类推。然后,将该求和追加到求和列表。我不确定这正是您要寻找的东西,所以让我知道我哪里出了问题。但是int的特定错误是无法接受的,这是因为e在for循环中被声明为int。

答案 1 :(得分:0)

您可以使用zip和map沿列方向应用操作

allStates = list(map(sum,[*zip(*statesData)][1:]))