generating variable names on fly in python [duplicate]

Posted on

Solving problem is about exposing yourself to as many situations as possible like generating variable names on fly in python [duplicate] and practice these strategies over and over. With time, it becomes second nature and a natural way you approach any problems in general. Big or small, always start with a plan, use other strategies mentioned here till you are confident and ready to code the solution.
In this post, my aim is to share an overview the topic about generating variable names on fly in python [duplicate], which can be followed any time. Take easy to follow this discuss.

generating variable names on fly in python [duplicate]

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.

Answer #1:

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
Answered By: Curious2learn

Answer #2:

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])));
Answered By: kanaka

Answer #3:

On an object, you can achieve this with setattr

>>> class A(object): pass
>>> a=A()
>>> setattr(a, "hello1", 5)
>>> a.hello1
5
Answered By: Tim ?as

Answer #4:

I got your problem , and here is my answer:

prices = [5, 12, 45]
list=['1','2','3']
for i in range(1,3):
  vars()["prices"+list[0]]=prices[0]
print ("prices[i]=" +prices[i])

so while printing:

price1 = 5
price2 = 12
price3 = 45
Answered By: Stefano Borini

Answer #5:

Another example, which is really a variation of another answer, in that it uses a dictionary too:

>>> vr={}
... for num in range(1,4):
...     vr[str(num)] = 5 + num
... 
>>> print vr["3"]
8
>>> 
Answered By: Pranjay Kaparuwan

Answer #6:

bit long, it works i guess…

prices = [5, 12, 45]
names = []
for i, _ in enumerate(prices):
    names.append("price"+str(i+1))
dict = {}
for name, price in zip(names, prices):
    dict[name] = price
for item in dict:
    print(item, "=", dict[item])
Answered By: PolyGeo
The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .

Leave a Reply

Your email address will not be published. Required fields are marked *