替换列表中的所有负值

nod*_*del 3 python python-3.x

我正试图在代码战中解决这个问题而且我完全难过了:

y = [-1, -1, 2, 8, -1, 4]
z = [1,3,5]
#to create [1,3,2,8,5,4]
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

我试着这样做:

for e in range(len(y)):
    try:
        if y[e] < 0:
            y[e] = z[e]
    except:
        pass
Run Code Online (Sandbox Code Playgroud)

但这只有在负面与z中的内容相对应时才有效.

Kas*_*mvd 11

如果您确定负数的数量始终相等,则z可以转换z为可迭代并使用列表推导来创建新列表:

In [9]: z = iter(z)

In [10]: [next(z) if i < 0 else i for i in y]
Out[10]: [1, 3, 2, 8, 5, 4]
Run Code Online (Sandbox Code Playgroud)

请注意,如果长度z小于负数的数量,则会引发StopIteration错误.