微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

列表理解可以帮助缩短这段代码吗?

如何解决列表理解可以帮助缩短这段代码吗?

我是一个完整的编码初学者,大约 3 周前开始使用 Python。我被邀请参加一个在线挑战(使用 python 2.7),我将其用作练习的机会。当前的挑战要求一个函数接受一个整数列表并返回这些数字的某个非空子集的最大乘积。

以下代码有效——即。它通过了挑战带来的考验——但我觉得它太长而且笨重。我无法评估它是快还是慢,但会假设后者。有没有人对一个很好的资源有建议,可以帮助我理解如何为未来的案例改进这种类型的代码? (例如,可以很好地解释列表理解的东西,也许?)

def solution(xs) :
    neglist = list()
    poslist = list()
    endlist = list()
    for number in xs :
        if number == 0 : continue
        if number < 0 : neglist.append(number)
        if number > 0 : poslist.append(number)
    neglist.sort()
    poslist.sort()
    if len(neglist) > 1 and len(neglist)% 2 != 0 :
        neglist = neglist[:-1]
    for number in neglist :
        endlist.append(number)
    for number in poslist :
        endlist.append(number)
    output = 1
    for number in endlist :
        output *= number
    if output < 0 and 0 in xs: output = 0
    return str(output)

解决方法

如果最后 5 行是正确的(从 output = 1 到末尾),那么您可以非常紧凑地替换为列表理解。

def split_pos_neg(original):
    original.sort()
    pos = [x for x in original if x > 0]
    neg = [x for x in original if x < 0]
    print (pos)
    print (neg)
    return

orig = [3,15,-2,-98,1]
split_pos_neg(orig) # prints [1,3,15] and [-98,-2]

代码 pos = [x for x in original if x > 0] 为原始列表的每个正元素创建一个名为 pos 的新列表。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?