usrb1n
usrb1n

Reputation: 35

Python - Use a variable as a list name

I have this code in python.

import sys
list1 = ["A", "B", "C"]
list2 = [1, 2, 3]

myarg = sys.argv[1]
print len(myarg)

I will run this script from command line like this

python script.py list1

So I need a way to make the len work with the list instead of the variable, I just want to give the name of the list in the var.

I know for this example I can do

if myarg == "list1":
    print len(list1)
else if myarg == "list2"
    print len(list2)

But I have 13 lists on my script and I need a way to refer to them by the name I give on the command line.

Upvotes: 3

Views: 4646

Answers (3)

sberry
sberry

Reputation: 132138

Since it is possible, and thought @Lattyware's answer is the correct one, this is how you could do it:

import sys
list1 = ["A", "B", "C"]
list2 = [1, 2, 3]

myarg = sys.argv[1]

print len(globals().get(myarg, []))

If it prints 0, then you have a bad argument on the command line.

Upvotes: 2

Nicolas
Nicolas

Reputation: 5678

You shouldn't, but if you really want/have to do this, you can use globals():

print len(globals()[myarg])

First make sure myarg is the name of a declared variable: if myarg in globals(): ...

Upvotes: 1

Gareth Latty
Gareth Latty

Reputation: 89097

While this is entirely possible in Python, it's not needed. The best solution here is to not do this, have a dictionary instead.

import sys

lists = {
    "list1": ["A", "B", "C"],
    "list2": [1, 2, 3],
}

myarg = sys.argv[1]
print len(lists[myarg])

You note you have 13 lists in your script - where you have lots of similar data (or data that needs to be handled in a similar way), it's a sign you want a data structure, rather than flat variables. It will make your life a lot easier.

Upvotes: 8

Related Questions