我有一个嵌套的列表结构像这样:
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
您可以使用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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。