Python Swap Function

前端 未结 3 893
执念已碎
执念已碎 2021-01-26 12:30

I\'m having a hard time expressing this in Python.

This is the description of what needs to be done.

swap_cards: (list of int, int) -> NoneType

相关标签:
3条回答
  • 2021-01-26 12:53

    Sounds like some index notation is required here:

    >>> def swap_cards(L, n):
    ...     if len(L) == n + 1:
    ...         L[n], L[0] = L[0], L[n]
    ...         return L
    ...     L[n], L[n+1] = L[n+1], L[n]
    ...     return L
    ... 
    >>> swap_cards([3, 2, 1, 4, 5, 6, 0], 5)
    [3, 2, 1, 4, 5, 0, 6]
    >>> swap_cards([3, 2, 1, 4, 5, 6, 0], 6)
    [0, 2, 1, 4, 5, 6, 3]
    
    0 讨论(0)
  • 2021-01-26 13:02

    You can use the tuple swap idiom a, b = b, ato swap the variable noting that for edge cases you need to wrap around the index index % len(seq)

    Implementation

    def swap_cards(seq, index):
        indexes = (index, (index + 1)% len(seq))
        seq[indexes[0]], seq[indexes[1]] = seq[indexes[1]], seq[indexes[0]]
        return seq
    

    Example

    >>> swap_cards([3, 2, 1, 4, 5, 6, 0], 6)
    [0, 2, 1, 4, 5, 6, 3]
    >>> swap_cards([3, 2, 1, 4, 5, 6, 0], 5)
    [3, 2, 1, 4, 5, 0, 6]
    
    0 讨论(0)
  • 2021-01-26 13:18
    def swap_cards(deck, index):
        if index in range(0, len(deck)):
            factor = (index + 1) % len(deck)
            aux = deck[factor]
            deck[factor] = deck[index]
            deck[index] = aux
            return deck
        else:
            return None
    
    deck = [3, 2, 1, 4, 5, 6, 0]
    
    new_deck = swap_cards(deck, 6)
    
    print new_deck
    

    Output:

    [0, 2, 1, 4, 5, 6, 3]
    
    0 讨论(0)
提交回复
热议问题