我想创建一个新列表。
新列表将包含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
我觉得这应该容易得多。即使我是新手,我也认为这将是一个常见问题。在更大的列表中采用多个列表的相同元素并处理数据。
答案 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:]))