Skip to content Skip to sidebar Skip to footer

Python Swap Function

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 swap_cards([3, 2, 1, 4, 5, 6, 0]

Solution 1:

Sounds like some index notation is required here:

>>>defswap_cards(L, n):...iflen(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]

Solution 2:

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]

Solution 3:

defswap_cards(deck, index):
    if index inrange(0, len(deck)):
        factor = (index + 1) % len(deck)
        aux = deck[factor]
        deck[factor] = deck[index]
        deck[index] = aux
        return deck
    else:
        returnNone

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]

Post a Comment for "Python Swap Function"