0

The answer to a question on multiple-value elements in a config file (which exactly fits my needs) suggests to "unpack the string from the config". I read the doc for unpacking arguments lists suggested in several places but I fail to understand how this relates to my problem.

I am sure this must be obvious: having a string str = "123,456", how can I transform it into the list [123,456] (the number of elements separated by a comma in the string may vary)

Thank you.

1
  • Thank you for the responses. I learned something with the map() function. Also "str" is indeed a bad name for a function, I usually use the thisString version (but Murphy's law dictates that I used "str" when posting worldwide :)) Commented Jun 25, 2012 at 19:56

4 Answers 4

5
[int(x) for x in str.split(",")] 

You're basically applying the function int to each element produced by split of your string.

The result of simply str.split(',') would be ["123","456"].

As Daniel Roseman pointed out, you should be careful not to use variable or method names that inadvertently overshadow built in methods, like, for instance, str.

Sign up to request clarification or add additional context in comments.

Comments

4

Do you want a list of strings or a list of ints?

If you just want a list of strings, it's very simple:

my_list = my_string.split(',') 

If you want to convert these to ints, you need:

my_list = map(int, my_string.split(',')) 

(Also, don't use str as a variable name as it shadows the built-in str() function.)

2 Comments

Out of curiosity, is there any noticeable difference in terms of performance between using map or simply the syntax I presented?
Not really. To be honest, I usually use the list comprehension myself, but typed in map this time because it's quicker to type :-)
0

The easiest way would be to use split().

unpacked = str.split(',') 

Comments

0

Although I agree with the other answers, you should also handle exceptions in the case of invalid string representation of a supposed number. Take, for example, the following snippet:

number_string = "123,456,x21" delimiter = "," number_list = [] for item in number_string.split(delimiter): try: my_num = int(item) number_list.append(item) except ValueError, e: # you can choose to just pass or handle the error like so print "Skipping %s: %s" % (item, e.message) 

Just a thought. Good luck!

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.