Need better way to unpack a list

Peter Otten __peter__ at web.de
Wed Aug 17 10:45:13 CEST 2005


Nx wrote:

> Is there a better solution to following problem :
> 
> I want to unpack a list into variables
> the list is created at runtime and I do not know
> how many items there will be , but I know not more than 25.
> The list unpacks into variables which are prev. defined as
> line1,line2....line25 which are actually the names of lineedit fields in
> a Qt gui application and which need to be populated.
> I currently use following to achieve that :
> 
> c=0
> while c < len(mylinelist):
>      c = c + 1
>      if c==1:
>          self.line1.setText(mylinelist[c])
>      if c==2 :
>          self.line2.setText(mylinelist[c])
>      .
>      .
>      .
>      if c==25:
>         self.line25.setText(mylinelist[c])
> 
> I rather have someting like
> pseudo code follows:
> 
>   self.line+"c"+.setText(mylinelist[c])
> 
> How to do that ?

for index, value in enumerate(mylinelist):
    getattr(self, "line%d" % (index + 1)).setText(value)

A better approach would be to create a list of lineedit fields in the
__init__() method instead of (or in addition to) the individual lineNNN
attributes and then just write

for edit, value in zip(self.lineedits, mylinelist):
    edit.setText(value)

If you want to play it safe you might also want to clear the extra
lineedits:

from itertools import repeat, chain, izip
for edit, value in izip(self.lineedits, chain(mylinelist, repeat(""))):
    edit.setText(value)

Peter




More information about the Python-list mailing list