Increase efficiency of card-ordering program
Here is a good opportunity to break out a couple of tools from the standard library.

collections.deque offers fast appends and pops on both ends and is thus perfect to represent your deck of cards, when you take cards from the top and put some back to the bottom.

itertools.cycle can be used to switch between the two destinations of the cards: the top of the pile (table_list.appendleft) and the bottom of the deck (card_list.append). Using appendleft there avoids the need to reverse the pile each round.

Also, a while True loop with a round += 1 inside could be a for round ... loop instead.

from collections import deque
from itertools import cycle, count

def num_of_round(num_cards):
    orig_order = deque(xrange(num_cards))
    card_list  = deque(orig_order)
    table_list = deque()

    for rounds in count(1):
        appendfunc = cycle((table_list.appendleft, card_list.append))
        while card_list:
            append = next(appendfunc)
            append(card_list.popleft())
        card_list, table_list = table_list, card_list   
        if card_list == orig_order:
            return rounds