String Replace Problem...

Steven Bethard steven.bethard at gmail.com
Mon Feb 28 16:03:38 EST 2005


Sean McIlroy wrote:
> f = lambda x: (x[0]=='@' and x[6:] + '.0') or (x=='/' and x + '\n') or
> x

See "Inappropriate use of Lambda" in 
http://www.python.org/moin/DubiousPython.

You're creating a named function, so there's no reason to use the 
anonymous function syntax.  Try:

def f(x):
     return (x[0]=='@' and x[6:] + '.0') or (x=='/' and x + '\n') or x

or if it must be on one line:

def f(x): return (x[0]=='@' and x[6:] + '.0') or (x=='/' and x + '\n') or x

Personally, I would probably write this as IMHO more readable:

infile, outfile = open("Errors.txt"), open("Errors_2.txt")
for i, line in enumerate(infile):
     permx, atpermx, rest = line.split(None, 2)
     outfile.write('  '.join([permx, str(parameter_values[i]), rest]))


In action:

py> s = """\
...   'PERMX'  @PERMX1  1 34  1  20  1 6
...   'PERMX'  @PERMX2  1 34  21 41  1 6
...   'PERMX'  @PERMX3  1 34  1  20  7 14
...   'PERMX'  @PERMX4  1 34  21 41  7 14
...   'PERMX'  @PERMX5  1 34  1  20 15 26
...   'PERMX'  @PERMX6  1 34  21 41 15 26
...   'PERMX'  @PERMX7  1 34  1  20 27 28
...   'PERMX'  @PERMX8  1 34  21 41 27 28
...   'PERMX'  @PERMX9  1 34  1  20 29 34
...   'PERMX'  @PERMX10  1 34  21 41 29 34
...   'PERMX'  @PERMX11  1 34  1  20 35 42
...   'PERMX'  @PERMX12  1 34  21 41 35 42
...   'PERMX'  @PERMX13  1 34  1  20 43 53
...   'PERMX'  @PERMX14  1 34  21 41 43 53
...   'PERMX'  @PERMX15  1 34  1  20 54 61
...   'PERMX'  @PERMX16  1 34  21 41 54 61
... """
py> parameter_values = range(1, 17)
py> for i, line in enumerate(s.splitlines()):
...     permx, atpermx, rest = line.split(None, 2)
...     print '  '.join([permx, str(parameter_values[i]), rest])
...
'PERMX'  1  1 34  1  20  1 6
'PERMX'  2  1 34  21 41  1 6
'PERMX'  3  1 34  1  20  7 14
'PERMX'  4  1 34  21 41  7 14
'PERMX'  5  1 34  1  20 15 26
'PERMX'  6  1 34  21 41 15 26
'PERMX'  7  1 34  1  20 27 28
'PERMX'  8  1 34  21 41 27 28
'PERMX'  9  1 34  1  20 29 34
'PERMX'  10  1 34  21 41 29 34
'PERMX'  11  1 34  1  20 35 42
'PERMX'  12  1 34  21 41 35 42
'PERMX'  13  1 34  1  20 43 53
'PERMX'  14  1 34  21 41 43 53
'PERMX'  15  1 34  1  20 54 61
'PERMX'  16  1 34  21 41 54 61

STeVe



More information about the Python-list mailing list