python反向函数和布尔值错误

python反向函数和布尔值错误,python,boolean,reverse,Python,Boolean,Reverse,我编写了一个函数,它从一个列表中生成两个列表的元组。一个列表包含第二、第四和第五个值,另一个列表包含所有剩余值。我还有一个条件,如果reverse=True,列表的值在返回时将被反转 def seperate(x, reverse=False): xs = [] ys = [] for i in range(0, len(x), 2): xs.append(x[i]) ys.append(x[i + 1]) ret

我编写了一个函数,它从一个列表中生成两个列表的元组。一个列表包含第二、第四和第五个值,另一个列表包含所有剩余值。我还有一个条件,如果reverse=True,列表的值在返回时将被反转

def seperate(x, reverse=False):

    xs = []
    ys = []
    for i in range(0, len(x), 2):
            xs.append(x[i])
            ys.append(x[i + 1])
    return (xs, ys)
    if reverse is True:
            x = xs.reverse()
            y = ys.reverse()
    return(x, y)

由于某些原因,当reverse为True时,列表不会被反转,它们与reverse为False时相同

原因
reverse=True
不起作用,是因为在检查之前有一条
return
语句:

return (xs, ys)
return
语句后的代码永远不会执行

另外,
reverse()
将列表反转到位并返回
None
,因此
x
y
最终将成为
None

以下是如何解决这两个问题:

if reverse:
        xs.reverse()
        ys.reverse()
return (xs, ys)
最后,可以使用切片而不是显式循环来提取奇偶元素:

In [7]: x = [1, 2, 3, 4, 5, 6, 7, 8]

In [8]: x[::2]
Out[8]: [1, 3, 5, 7]

In [9]: x[1::2]
Out[9]: [2, 4, 6, 8]
reverse()
不返回任何值。它在适当的位置反转列表。因此,反向列表位于
xs
ys

另外,在执行
if
语句之前返回

return (xs, ys)
if reverse is True:
在函数中,在
返回后
一切都不工作。这就是为什么您的
if
语句不起作用的原因。它使
返回后的所有内容无效。你可以想象它是这样的

def wr():
    x="hey"
    y="Hello"
    return x
    return y
print (wr())
与此类似,此函数将只编写
hey
,因为它返回一次,而另一次
返回y
不再有效