首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换列表中的所有负值

替换列表中的所有负值
EN

Stack Overflow用户
提问于 2016-09-11 22:37:47
回答 4查看 2.2K关注 0票数 3

我正试图解决代码战的问题,我完全困惑于:

代码语言:javascript
复制
y = [-1, -1, 2, 8, -1, 4]
z = [1,3,5]
#to create [1,3,2,8,5,4]

我该怎么做?

我试着做:

代码语言:javascript
复制
for e in range(len(y)):
    try:
        if y[e] < 0:
            y[e] = z[e]
    except:
        pass

但是,只有当否定与z中的内容相对应时,这才能起作用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-11 22:43:21

如果您确信负数的数目总是与z相等,则可以将z转换为可迭代的,并使用列表理解来创建新列表:

代码语言:javascript
复制
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]

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

票数 11
EN

Stack Overflow用户

发布于 2016-09-11 22:50:27

一条龙。使用pop()模拟队列行为。(注意,这消耗了z)

代码语言:javascript
复制
>>> print([num if num > 0 else z.pop(0) for num in y])
[1, 3, 2, 8, 5, 4]
票数 3
EN

Stack Overflow用户

发布于 2016-09-11 22:41:12

您试图对这两个列表使用相同的索引,这似乎不是您的示例中的正确行为。例如,y中的-1位于索引4,但在索引2处被z中的5替换。

代码语言:javascript
复制
zindex = 0
for yindex in range(len(y)):
    if y[yindex] < 0:
        y[yindex] = z[zindex]
        zindex += 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39441323

复制
相关文章

相似问题

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