列表理解可以帮助缩短这段代码吗?
Can list comprehension assist in shortening this code?
我是编码的完全初学者,大约 3 周前开始 Python。我被邀请参加在线挑战(使用 python 2.7),我将其用作练习的机会。当前的挑战要求一个函数,该函数采用整数列表和 returns 这些数字的某个非空子集的最大乘积。
以下代码有效——即。它通过了挑战提出的测试——但我觉得它过长且笨重。我无法评估它是快还是慢,但会假设后者。有没有人建议好的资源可以帮助我了解如何为将来的案例改进此类代码? (例如,也许可以很好地解释列表理解?)
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, 0, 1]
split_pos_neg(orig) # prints [1, 3, 15] and [-98, -2]
代码 pos = [x for x in original if x > 0]
为原始列表中的每个正元素创建了一个名为 pos 的新列表。
我是编码的完全初学者,大约 3 周前开始 Python。我被邀请参加在线挑战(使用 python 2.7),我将其用作练习的机会。当前的挑战要求一个函数,该函数采用整数列表和 returns 这些数字的某个非空子集的最大乘积。
以下代码有效——即。它通过了挑战提出的测试——但我觉得它过长且笨重。我无法评估它是快还是慢,但会假设后者。有没有人建议好的资源可以帮助我了解如何为将来的案例改进此类代码? (例如,也许可以很好地解释列表理解?)
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, 0, 1]
split_pos_neg(orig) # prints [1, 3, 15] and [-98, -2]
代码 pos = [x for x in original if x > 0]
为原始列表中的每个正元素创建了一个名为 pos 的新列表。