开发者社区> 问答> 正文

嵌套列表中简单的元素减法是否满足条件?

我有一个嵌套的列表结构像这样:

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]和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]上执行,因此它应该有一个范围(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"]

因为我们将对mylist1进行操作,而对mylist0进行操作,而对mylist2进行操作。 然而,我不断收到以下邮件,我不知道为什么。我在网上搜索了一个小时,但没有找到任何有用的信息。有谁知道更好的脚本吗?

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。 问题来源StackOverflow 地址:/questions/59382651/simple-element-subtraction-in-nested-list-if-condition-is-satisfied

展开
收起
kun坤 2019-12-27 17:03:35 430 0
1 条回答
写回答
取消 提交回答
  • 您可以使用enumerate遍历列表,并从列表中的索引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
    
    2019-12-27 17:04:22
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载