如果满足条件,则在嵌套列表中进行简单元素减法?



我有一个嵌套列表,结构如下:

mylist = [
[
[
['1', '2019-12-10 9:54']
],
[
['2', '2019-12-10 15:54'], 
['3', '2019-12-10 15:57']
]
], 
[
[
['4', '2019-12-12 9:51']
],
[
['5', '2019-12-12 15:51'], 
['6', '2019-12-12 15:53'], 
['7', '2019-12-12 15:59']
]
], 
[
[
['8', '2019-12-13 15:52']
]
]
]

父列表mylist包含 3 个元素:mylist[0], mylist[1], and mylist[2]mylist[0]包含 2 个元素,mylist[1]包含 2 个元素,mylist[2]包含 1 个元素。

如果满足某个条件,我想减去两个值。在这种情况下,它是这样的:

如果mylist中的一个元素包含 2 个元素(如mylist[0]mylist[1]do(,我想从以前的列表中减去一个元素,从这个列表中的元素中减去一个元素。更具体地说:

由于mylist[1]包含 2 个元素,因此它符合条件,因此应始终执行以下数学运算:mylist[1][0][0][0] - mylist[0][-1][-1][0],换算为4 - 3 = 1


mylist的任何元素包含两个元素(即:

for i in mylist:
if len(i) == 2:
do the operation!

但是该操作不应该在第一个元素上完成,mylist[0],所以它应该有一个range(1, len(mylist))


为了尝试这个,我使用了以下代码:

mylist = [ ... same as above ... ]
subtracted = []
for i in mylist:
if len(i) == 2:
math = [float(mylist[i][0][0][0]) - float(mylist[i-1][-1][-1][0]) for i in range(1, len(mylist))]
for b in math:
newb = str(b) + "  at  Time:  " + i[0][0][1]
subtracted.append(newb)
print(subtracted)

所需的输出为:

Desired output:
["1.0  at  Time:   2019-12-12 9:51"]

因为我们会对mylist[1]进行操作(它有 2 个元素(,但不会对mylist[0]进行操作(它是列表的开头,所以它超出了范围(,而不是对mylist[2]进行操作(它只包含 1 个元素(。

但是,我不断收到以下内容,我不知道为什么。在过去的一个小时里,我在网上搜索了,但没有找到任何有用的信息。有谁知道这样做的更好脚本是什么?

Actual output:
['1.0  at  Time:  2019-12-10 9:54', '1.0  at  Time:  2019-12-10 9:54', '1.0  Time:  2019-12-12 9:51', '1.0  at  Time:  2019-12-12 9:51']

编辑:如果mylist[3]有另一个元素包含 2 个元素,数学仍然会完成(即使mylist[2]有 1 个元素......所以前一个元素的长度无关紧要(,其中来自mylist[3]的数字,假设是 9,将从mylist[2]中减去数字,给出:mylist[3][0][0][0] - mylist[2][-1][-1][0] = 1.0.

您可以使用枚举循环访问列表并从列表中的索引 1 开始,并将起始值设置为 1。然后,这将从索引 1 及以后循环遍历列表中的项目,然后您可以使用索引通过从当前索引中减去 1 来引用上一个列表。

for index, sub_list in enumerate(mylist[1:], 1):
if len(sub_list) == 2:
this_val = int(mylist[index][0][0][0])
prev_val = int(mylist[index - 1][-1][-1][0])
result = this_val - prev_val
print(f'{this_val} - {prev_val} = {result}')

输出

4 - 3 = 1