使用切片语法交换列表中的元素

时间:2013-11-05 01:43:22

标签: python list swap slice

我在使用以下功能时遇到了一些麻烦。 我想知道如何通过使用简单的列表方法来实现doc-string中给出的示例。

# The values of the two jokers.
JOKER1 = 27
JOKER2 = 28


def triple_cut(deck):
  '''(list of int) -> NoneType
  Locate JOKER1 and JOKER2 in deck and preform a triple cut.\
  Everything above the first joker goes at the bottom of the deck.\
  And everything below the second joker goes to the top of the deck.\
  Treat the deck as circular.
  >>> deck = [1, 2, 27, 3, 4, 28, 5, 6, 7]
  >>> triple_cut(deck)
  >>> deck
  [5, 6, 7, 27, 3, 4, 28, 1, 2]
  >>> deck = [28, 1, 2, 3, 27]
  >>> triple_cut(deck)
  >>> deck
  [28, 1, 2, 3, 27]
  '''
  # obtain indices of JOKER1 and JOKER2
  j1 = deck.index(JOKER1)
  j2 = deck.index(JOKER2)
  # determine what joker appears 1st and 2nd
  first = min(j1, j2)
  second = max(j1, j2)
  # use slice syntax to obtain values before JOKER1 and after JOKER2
  upper = deck[0:first]
  lower = deck[(second + 1):]
  # swap these values
  upper, lower = lower, upper

当我运行int列表时。包含27和28,该函数对列表没有任何作用。 我不知道问题是什么,你能帮助我吗?

3 个答案:

答案 0 :(得分:1)

您需要再次将各个部分粘贴在一起,例如:

deck[:] = deck[second + 1:] + deck[first: second + 1] + deck[:first]

这取代了整个套牌(deck[:] = ...)。这很简单。试着变得更加棘手,风险自负; - )

答案 1 :(得分:0)

好吧,你正在复制甲板的一半,改变它们所分配的变量(比较容易按照你想要的方式分配它们)......就是这样。你不要把它们连在一起或任何东西。你也没有中间切片(笑话者之间的卡片)。

答案 2 :(得分:0)

只有在您立即执行此操作时,才能对切片进行分配。您无法保存切片然后分配给它。

deck[(second + 1):], deck[0:first] = deck[0:first], deck[(second + 1):]