【问题标题】:Python swap adjacent elements in a list (Syntax Error) [duplicate]Python交换列表中的相邻元素(语法错误)[重复]
【发布时间】:2017-06-28 18:55:02
【问题描述】:

这是我的清单:

 l = [0, 1, 2, 3, 4, 5]

我想交换相邻的元素,所以列表应该是这样的:

l = [1, 0, 3, 2, 5, 4]

我知道有很多解决方案,我想我找到了一个:

def swap(l):
    return l[::2], l[1::2] = l[1::2], l[::2]

无论如何我仍然收到此错误:

file.py on line 2
    return l[::2], l[1::2] = l[1::2], l[::2]
                           ^
SyntaxError: invalid syntax

非常感谢任何解决此问题的提示或想法。 (在 Python2 上工作)

【问题讨论】:

  • 你不能return一个赋值语句只是一个表达式。鉴于您正在更改 l 值本身,您可能根本不需要 return 语句。
  • 赋值是语句,不是表达式。它不能被返回,因为它没有计算出一个值。
  • 哇你们真快-谢谢,鉴于我想返回列表,有没有办法在不增加一行的情况下做到这一点?
  • 注意:您目前只交换前2个元素,交换列表中的所有元素然后您可以使用切片分配(注意:列表需要是偶数长度):l[::2], l[1::2] = l[1::2], l[::2] -> [1, 0, 3, 2, 5, 4]
  • 你正在修改你可能想要创建一个新列表并返回它,例如return [x for pair in zip(*[iter(l)]*2) for x in reversed(pair)]

标签: python list syntax-error swap


【解决方案1】:

删除return:

def swap(l):
    l[0], l[1] = l[1], l[0]

你只能返回表达式,不能返回完整的语句

请参阅here 了解差异的解释。

【讨论】:

    【解决方案2】:

    你的代码应该是

    def swap(l):
        l[0], l[1] = l[1], l[0]
    

    【讨论】:

    • 无需返回l,因为无论如何分配都会就地完成。
    • 是的,正确。 @DeepSpace
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2021-04-28
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    相关资源
    最近更新 更多