tags:

views:

143

answers:

4

Hi,

Is there a way I can generate variable names in python in a loop and assign values to them? For example, if I have

prices = [5, 12, 45]

I want

price1 = 5
price2 = 12
price3 = 45

Can I do this in a loop or something instead of manually assigning price1 = prices[0], price2 = prices[1] etc.

Thank you.

EDIT

Many people suggested that I write a reason for requiring this. First, there have been times where I have thought this may be more convenient than using a list...I don't remember exactly when, but I think I have thought of using this when there are many levels of nesting. For example, if one has a list of lists of lists, defining variables in the above way may help reduce the level of nesting. Second, today I thought of this when trying to learn use of Pytables. I just came across Pytables and I saw that when defining the structure of a table, the column names and types are described in the following manner:

class TableFormat(tables.IsDescription):
    firstColumnName = StringCol(16)
    secondColumnName = StringCol(16)
    thirdColumnName = StringCol(16)

If I have 100 columns, typing the name of each column explicitly seems a lot of work. So, I wondered whether there is a way to generate these column names on the fly.

+3  A: 

why you want to put them in vars like that, you want to consume more memory :), why not accessing them from the list prices[0], prices[1] ....

but what the hell maybe this can help you

price1, price2, price3 = prices
singularity
This does not help me because I have to physically type price1, price2 and price3. Something I would like to avoid when I have 100 variables.
Curious2learn
@Curious2learn : sorry , what do you mean physically type price1, ... ? is this vars names are enter by the user or what ... ? update your question to include all detail, thanks :)
singularity
@curious2learn : when you have 100 variables, and in particular if you have to assign them to foo1 foo2 foo3, it means that you are not a good coder, or there's something really, really wrong in your design, or both.
Stefano Borini
+3  A: 

Though I don't see much point, here it is:

for i in xrange(0, len(prices)):
    exec("price%d = %s" % (i + 1, repr(prices[i])));
Tim Čas
+3  A: 

If you really want to create them on the fly you can assign to the dict that is returned by either globals() or locals() depending on what namespace you want to create them in:

globals()['somevar'] = 'someval'
print somevar  # prints 'someval'

But I wouldn't recommend doing that. In general, avoid global variables. Using locals() often just obscures what you are really doing. Instead, create your own dict and assign to it.

mydict = {}
mydict['somevar'] = 'someval'
print mydict['somevar']

Learn the python zen; run this and grok it well:

>>> import this
kanaka
+1  A: 

On an object, you can achieve this with setattr

>>> class A(object): pass
>>> a=A()
>>> setattr(a, "hello1", 5)
>>> a.hello1
5
Stefano Borini