RE: Convert month name to month number faster

Discussion in 'Python' started by VYAS ASHISH M-NTB837, Jan 6, 2010.

  1. How about using list.index() and storing month names in a list? You may
    want to measure performance your self and conclude.

    Regards,
    Ashish Vyas

    -----Original Message-----
    From: python-list-bounces+ntb837=
    [mailto:python-list-bounces+ntb837=] On Behalf Of
    wiso
    Sent: Wednesday, January 06, 2010 4:34 PM
    To:
    Subject: Convert month name to month number faster

    I'm optimizing the inner most loop of my script. I need to convert month
    name to month number. I'm using python 2.6 on linux x64.


    month_dict = {"Jan":1,"Feb":2,"Mar":3,"Apr":4, "May":5, "Jun":6,
    "Jul":7,"Aug":8,"Sep":9,"Oct":10,"Nov":11,"Dec":12}

    def to_dict(name):
    return month_dict[name]

    def to_if(name):
    if name == "Jan": return 1
    elif name == "Feb": return 2
    elif name == "Mar": return 3
    elif name == "Apr": return 4
    elif name == "May": return 5
    elif name == "Jun": return 6
    elif name == "Jul": return 7
    elif name == "Aug": return 8
    elif name == "Sep": return 9
    elif name == "Oct": return 10
    elif name == "Nov": return 11
    elif name == "Dec": return 12
    else: raise ValueError

    import random
    l = [random.choice(month_dict.keys()) for _ in range(1000000)]

    from time import time
    t = time(); xxx=map(to_dict,l); print time() - t # 0.5
    t = time(); xxx=map(to_if,l); print time() - t # 1.0


    is there a faster solution? Maybe something with str.translate?

    The problem is a little different because I don't read random data, but
    sorted data. For example:

    l = [x for x in
    ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
    )
    for _ in range(1000)] # ["Jan","Jan", ..., "Feb", "Feb", ...]

    so maybe the to_if approach will be faster if I write the case in the
    best
    order. Look:

    l = ["Jan"] * 1000000 # to_if is in the best order for "Jan"
    t = time(); xxx=map(to_dict,l); print time() - t # 0.5
    t = time(); xxx=map(to_if,l); print time() - t # 0.5


    --
    http://mail.python.org/mailman/listinfo/python-list
     
    VYAS ASHISH M-NTB837, Jan 6, 2010
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Michal Maciejczak
    Replies:
    1
    Views:
    2,000
    Matthias Kaeppler
    Apr 23, 2005
  2. Bill
    Replies:
    10
    Views:
    750
    Fulvio
    Apr 13, 2006
  3. Steven D'Aprano

    Re: Convert month name to month number faster

    Steven D'Aprano, Jan 6, 2010, in forum: Python
    Replies:
    0
    Views:
    500
    Steven D'Aprano
    Jan 6, 2010
  4. eddie wang

    to convert a month to previous month

    eddie wang, Oct 9, 2003, in forum: ASP General
    Replies:
    9
    Views:
    130
    Chris Hohmann
    Oct 10, 2003
  5. Adgar Marks

    Convert month string to number

    Adgar Marks, Jul 27, 2008, in forum: Ruby
    Replies:
    1
    Views:
    166
    David A. Black
    Jul 27, 2008
Loading...

Share This Page