I am out of trial and error again Lists

Denis McMahon denismfmcmahon at gmail.com
Wed Oct 22 18:43:14 EDT 2014


On Wed, 22 Oct 2014 16:30:37 -0400, Seymore4Head wrote:

> def nametonumber(name):
>     lst=[""]
>     for x,y in enumerate (name):
>         lst=lst.append(y)
>     print (lst)
>     return (lst)
> a=["1-800-getcharter"]
> print (nametonumber(a))#18004382427837
>     
>     
> The syntax for when to use a () and when to use [] still throws me a
> curve.
> 
> For now, I am trying to end up with a list that has each character in
> "a" as a single item.
> 
> I get:
> None None

First of all, an empty list is created with:

emptylist = []

whereas

x = [""]

creates a list containing one element, that element being an empty 
string. Not the same thing!

Did you try stepping through your code line by line in the interpreter to 
see what happened at each step?

note that append is a method of a list object, it has no return value, 
the original list is modified in place.

>>> l = ["a","b","c"]   # declare a list
>>> l.append( "d" )     # use the append method
>>> l                   # show the list
['a', 'b', 'c', 'd']

So your line:

lst = lst.append(y)

should be:

lst.append(y)

Finally, did you really intend to pass a single element list into the 
function, or did you intend to pass a string into the function?

There is a difference between:

a=["1-800-getcharter"] 

which creates a single element list, the one element is the string "1-800-
getcharter", and:

a="1-800-getcharter"

which creates a string variable with the value "1-800-getcharter"

when you pass a list containing a string to your function, enumerate will 
look at each list element, so if your list contains one string, enumerate 
will return the pair 0, the_string, so the string gets appended to your 
empty list as a single item.

The code I think you wanted to write is as follows:

def nametonumber(name):
    lst=[]
    for x,y in enumerate(name):
        lst.append(y)
    return lst

a="1-800-getcharter"
print ( nametonumber(a) )

I suggests that you study very carefully the differences between this and 
your original code until you understand the reason and effect of every 
difference, as only by doing so will you discover the misconceptions 
which you seem to be operating under, and until you can get some of those 
straightened out, you're not going to make a lot of progress.

Try running the original code and my suggested alternative line by line 
in the interpreter, and examining the state of relevant variables after 
each line of execution.

Here's a code file with both your original code and my modified code with 
comprehensive print statements inserted for debugging. By referencing the 
debugging statements back to the code, you should be able to determine 
exactly where in your original code the value of "none" comes from.

### code starts

print ( "original code" )

def nametonumber(name):
    print ("a) name =", name)
    lst=[""]
    print ( "b) lst = ", lst )
    for x,y in enumerate (name):
        print ( "c) x = ", x, "; y = ", y, "; lst = ", lst )
        lst=lst.append(y)
        print ( "d) lst = ", lst )
    print (lst)
    return (lst)

a=["1-800-getcharter"]
print ( "e) a = ", a )
print (nametonumber(a))

print ( "modified code" )

def nametonumber2(name):
    print ("f) name =", name)
    lst=[]
    print ( "g) lst = ", lst )
    for x,y in enumerate(name):
        print ( "h) x = ", x, "; y = ", y, "; lst = ", lst )
        lst.append(y)
        print ( "i) lst = ", lst )
    return lst

a="1-800-getcharter"
print ( "j) a = ", a )
print ( nametonumber2(a) )

### code ends

If you run the above code exactly as it is, you should see in the output 
how the enumeration reacts according to the different data it is given to 
enumerate, and also where lst is assigned the value none.

As I said above, getting your head round why this is happening is 
essential, and I really do suggest that you slow down and try and 
understand these basic concepts, because at the moment it seems you are 
striving to attempt more and more complicated things without 
understanding the basics upon which they are constructed, and like many 
other similar newsgroups, it's been my experience in the past that there 
is limited tolerance here for people who repeatedly make the same basic 
errors without learning from them.

-- 
Denis McMahon, denismfmcmahon at gmail.com



More information about the Python-list mailing list