471,339 Members | 1,280 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,339 software developers and data experts.

string substitution for creating variable names

In the below code, I have used 5 different variables var1xxx,...var5xxx using 5 statements. But I would like to loop over the aList elements to substitute for 1 to 5 in the variable names and hence assign the value. (Here I have shown the same element value as assigned.) Can you please let me know how to use either string substitution or string template for the following to reduce the number of lines of code and hence consice.

Thanks & Regards,
SKN

Expand|Select|Wrap|Line Numbers
  1. aList = [1,2,3,4,5]
  2. var1xxx = aList[0]
  3. var2xxx = aList[1]
  4. var3xxx = aList[2]
  5. var4xxx = aList[3]
  6. var5xxx = aList[4]
  7. print var1xxx,var2xxx,var3xxx,var4xxx,var5xxx
  8.  
Aug 13 '07 #1
6 12679
bartonc
6,596 Expert 4TB
In the below code, I have used 5 different variables var1xxx,...var5xxx using 5 statements. But I would like to loop over the aList elements to substitute for 1 to 5 in the variable names and hence assign the value. (Here I have shown the same element value as assigned.) Can you please let me know how to use either string substitution or string template for the following to reduce the number of lines of code and hence consice.

Thanks & Regards,
SKN

Expand|Select|Wrap|Line Numbers
  1. aList = [1,2,3,4,5]
  2. var1xxx = aList[0]
  3. var2xxx = aList[1]
  4. var3xxx = aList[2]
  5. var4xxx = aList[3]
  6. var5xxx = aList[4]
  7. print var1xxx,var2xxx,var3xxx,var4xxx,var5xxx
  8.  
That's a fun one! I really liked writing this:
Expand|Select|Wrap|Line Numbers
  1. >>> aList = [1,2,3,4,5]
  2. >>> for i, value in enumerate(aList):
  3. ...     exec("var%dxxx = value" %(i+1))
  4. ...     
  5. >>> var1xxx
  6. 1
  7. >>> 
Aug 13 '07 #2
That's a fun one! I really liked writing this:
Expand|Select|Wrap|Line Numbers
  1. >>> aList = [1,2,3,4,5]
  2. >>> for i, value in enumerate(aList):
  3. ...     exec("var%dxxx = value" %(i+1))
  4. ...     
  5. >>> var1xxx
  6. 1
  7. >>> 
Thanks Bartonc. If aList has ['abc,'def','ghi'] in place of integers, then how to do that. Assuming that we have string substitution on right side variables also.
Expand|Select|Wrap|Line Numbers
  1. aList = ['abc','def','hij']
  2. aabcList = [1,2,3]
  3. adefList = [3,4,5]
  4. ahijList = [4,5,6]
  5. varabcxxx = aabcList[0]
  6. vardefxxx = adefList[0]
  7. varhijxxx = ahijList[0]
  8. print varabcxxx,vardefxxx,varhijxxx
  9.  
Thanks
SKN
Aug 13 '07 #3
bvdet
2,851 Expert Mod 2GB
Thanks Bartonc. If aList has ['abc,'def','ghi'] in place of integers, then how to do that. Assuming that we have string substitution on right side variables also.
Expand|Select|Wrap|Line Numbers
  1. aList = ['abc','def','hij']
  2. aabcList = [1,2,3]
  3. adefList = [3,4,5]
  4. ahijList = [4,5,6]
  5. varabcxxx = aabcList[0]
  6. vardefxxx = adefList[0]
  7. varhijxxx = ahijList[0]
  8. print varabcxxx,vardefxxx,varhijxxx
  9.  
Thanks
SKN
Here is one way:
Expand|Select|Wrap|Line Numbers
  1. >>> aList = ['abc','def','hij']
  2. >>> pre = 'var'
  3. >>> suf = 'xxx'
  4. >>> data = [[1,2,3], [3,4,5], [4,5,6]]
  5. >>> def var_dict(p,iList,s,data):
  6. ...     dd = {}
  7. ...     for i, item in enumerate(iList):
  8. ...         dd['a%sList' % item] = data[i]
  9. ...         dd['%s%s%s' % (p,item,s)] = data[i][0]
  10. ...     globals().update(dd)
  11. ...     return dd
  12. ... 
  13. >>> dd = var_dict(pre,aList,suf,data)
  14. >>> aabcList
  15. [1, 2, 3]
  16. >>> varabcxxx
  17. 1
  18. >>>
I did not need to return the dictionary or assign the function call to a variable. globals().update() assigns the values to the variable names in the global namespace of the module.
Aug 13 '07 #4
Here is one way:
Expand|Select|Wrap|Line Numbers
  1. >>> aList = ['abc','def','hij']
  2. >>> pre = 'var'
  3. >>> suf = 'xxx'
  4. >>> data = [[1,2,3], [3,4,5], [4,5,6]]
  5. >>> def var_dict(p,iList,s,data):
  6. ...     dd = {}
  7. ...     for i, item in enumerate(iList):
  8. ...         dd['a%sList' % item] = data[i]
  9. ...         dd['%s%s%s' % (p,item,s)] = data[i][0]
  10. ...     globals().update(dd)
  11. ...     return dd
  12. ... 
  13. >>> dd = var_dict(pre,aList,suf,data)
  14. >>> aabcList
  15. [1, 2, 3]
  16. >>> varabcxxx
  17. 1
  18. >>>
I did not need to return the dictionary or assign the function call to a variable. globals().update() assigns the values to the variable names in the global namespace of the module.
Thanks BV. Is it possible to use a dynamic list defined. I mean instead of defining "data" can we have aabcList[0] defined inside using the same substitute "abc" string in both left and right hand side of the assignment statement.


Regards,
SKN
Aug 14 '07 #5
bvdet
2,851 Expert Mod 2GB
Thanks BV. Is it possible to use a dynamic list defined. I mean instead of defining "data" can we have aabcList[0] defined inside using the same substitute "abc" string in both left and right hand side of the assignment statement.


Regards,
SKN
This can be done similar to what Barton proposed using exec() and eval(). Keeping with the dictionary approach:
Expand|Select|Wrap|Line Numbers
  1. aList = ['abc','def','hij']
  2.  
  3. dd1 = dict(zip(['a%sList' % item for item in aList], [[11,12,13], [13,14,15], [14,15,16]]))
  4. for item in aList:
  5.     dd1['v%sxxx' % item] = dd1['a%sList' % item][0]
  6. globals().update(dd1)
Aug 14 '07 #6
Thanks a bunch, BV. Which approach is efficient? Dictionary approach or using exec() and eval().


Regards,
SKN
Aug 14 '07 #7

Post your reply

Sign in to post your reply or Sign up for a free account.

Similar topics

reply views Thread by Wes Batson | last post: by
15 posts views Thread by Thomas Scheiderich | last post: by
2 posts views Thread by Hamish Symington | last post: by
5 posts views Thread by Murali | last post: by
10 posts views Thread by John Salerno | last post: by
7 posts views Thread by Samuel | last post: by
4 posts views Thread by Victor Lagerkvist | last post: by
reply views Thread by rosydwin | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.