首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(python)从for循环/列表理解中相同列表中的值中减去列表中的值

(python)从for循环/列表理解中相同列表中的值中减去列表中的值
EN

Stack Overflow用户
提问于 2022-11-08 15:27:45
回答 4查看 27关注 0票数 0

如果我有

代码语言:javascript
运行
复制
list1 = [3, 4, 6, 8, 13]

在for循环中,我想从后面的值中减去值i。在上面的例子中: 4-3,6-4,8-6,13-8.(我想跳过第一个值)所需的结果

代码语言:javascript
运行
复制
list2 = [3, 1, 2, 2, 5]

我可以在一个for循环/列表理解中这样做吗?

更确切地说,我想要在dataframe中这样做吗?

代码语言:javascript
运行
复制
   list1 
0     3   
1     4   
2     6   
3     8   
4     13

手术后

代码语言:javascript
运行
复制
   list1    list2 
0     3       3  
1     4       1   
2     6       2  
3     8       2 
4     13      5

我尝试过循环、lambda函数和列表理解,并尝试使用枚举()访问位置索引,但我想不出如何在要从中减去的值之前访问该值。

编辑:下面的答案有效。非常感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-11-08 15:29:47

您应该使用shift访问下一行:

代码语言:javascript
运行
复制
df['list2'] = df['list1'].sub(df['list1'].shift(fill_value=0))

或者,使用difffillna

代码语言:javascript
运行
复制
df['list2'] = df['list1'].diff().fillna(df['list1'])

输出:

代码语言:javascript
运行
复制
   list1  list2
0      3      3
1      4      1
2      6      2
3      8      2
4     13      5

对于纯python解决方案:

代码语言:javascript
运行
复制
list1 = [3, 4, 6, 8, 13]

list2 = [a-b for a,b in zip(list1, [0]+list1)]

输出:[3, 1, 2, 2, 5]

票数 0
EN

Stack Overflow用户

发布于 2022-11-08 15:32:59

dataframe解决方案已经发布。这是清单的一个实现:

代码语言:javascript
运行
复制
list1 = [3, 4, 6, 8, 13]

list2 = []
for i, v in enumerate(list1):
    list2.append(list1[i] - list1[i-1])
list2[0] = list1[0]

print(list2)  # [3, 1, 2, 2, 5]

最后,在清单理解方面:

代码语言:javascript
运行
复制
list2 = [list1[i] - list1[i-1] for i, v in enumerate(list1)]
list2[0] = list1[0]
票数 1
EN

Stack Overflow用户

发布于 2022-11-08 15:34:55

您可以向后循环for x in range(len(list) - 1, 0, -1):,然后可以执行list[x] = list[x] - list[x - 1]计算。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74363238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档