如何解决列表理解可以帮助缩短这段代码吗?
我是一个完整的编码初学者,大约 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 举报,一经查实,本站将立刻删除。