gpt4 book ai didi

Python 列表理解 : Modify list elements if a certain value occurs

转载 作者:太空狗 更新时间:2023-10-29 18:17:08 25 4
gpt4 key购买 nike

如何在 Python 的列表理解中执行以下操作?

nums = [1,1,0,1,1]
oFlag = 1
res = []
for x in nums:
if x == 0:
oFlag = 0
res.append(oFlag)
print(res)

# Output: [1,1,0,0,0]

基本上在这个例子中,一旦 0 出现,就将列表的其余部分归零。

最佳答案

在某些情况下,列表推导式是一种针对 mapfilter 函数的“命令式”语法,存在于许多函数式编程语言中。您尝试执行的操作通常称为 accumulate,这是一个略有不同的操作。您不能根据 mapfilter 实现 accumulate,除非使用副作用。 Python 允许您在列表推导式中产生副作用,因此这绝对是可能的,但带有副作用的列表推导式有点靠不住。以下是使用 accumulate 实现此功能的方法:

nums = [1,1,0,1,1]

def accumulator(last, cur):
return 1 if (last == 1 and cur == 1) else 0

list(accumulate(nums, accumulator))

或在一行中:

list(accumulate(nums, lambda last, cur: 1 if (last == 1 and cur == 1) else 0))

当然,有几种方法可以使用外部状态和带有副作用的列表推导来做到这一点。这是一个示例,它有点冗长但非常明确地说明了状态是如何被操纵的:

class MyState:
def __init__(self, initial_state):
self.state = initial_state
def getNext(self, cur):
self.state = accumulator(self.state, cur)
return self.state

mystate = MyState(1)
[mystate.getNext(x) for x in nums]

关于Python 列表理解 : Modify list elements if a certain value occurs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52414505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com