Python 我可以使用变量字符串引用列表吗?

Python 我可以使用变量字符串引用列表吗?,python,arrays,Python,Arrays,我有一本字典里的股票价格表和它们的价值表。我想查看列表以获取每天的股票价值,但在使用变量访问数据时,我很难解析列表中的位置 下面是一个例子: goog = [12,132,124,234,234] msft = [432,23,234,54,23] num_days = 5 stocks_i_own = {'goog':50, 'msft':50} for days in range(0,num_days): for stock in stocks_i_own: pr

我有一本字典里的股票价格表和它们的价值表。我想查看列表以获取每天的股票价值,但在使用变量访问数据时,我很难解析列表中的位置

下面是一个例子:

goog = [12,132,124,234,234]
msft = [432,23,234,54,23]

num_days = 5
stocks_i_own = {'goog':50, 'msft':50}

for days in range(0,num_days):
    for stock in stocks_i_own:
        print days, stock, stocks_i_own[stock]
        print stock[days] #prints just 'g' not the value on day0
        print 'vaue on ', days, ' is ', stock[days] *  stocks_i_own[stock]
问题是当我使用
stock[days]
获取数据时。我知道stock的值是正确的('goog'或'msft'),days的值是正确的(范围为0-4),但当将它们一起使用时,我不会从列表中获取数据,而是从单词本身上获取的位置。这是有道理的,因为类似于:

name = 'google'
name[0]

将返回g(在我的例子中就是这样),但是python有没有办法不将我提供的内容作为字符串,而是列表的引用来查看呢?

为什么不将当前列表存储为字典呢

而不是:

goog = [12, 132, 124, 234, 234]
msft = [432, 23, 234, 54, 23]
使用:

现在,您可以使用以下方法检索它们:

stock_vals[stock_name][day_index]
其中stock_name是
{'goog','msft',…}
的元素,day_index是元素
[0,6]
中,将逐日值移动到字典中:

stock_values = { 'goog': [12,132,124,234,234],
                 'msft': [432,23,234,54,23] }
然后像这样查找它们:

stock_values[ stock ][ days ]

-你可以这样做,但不建议这样做。最好将goog和msft存储在一个字典中,其中键是一个字符串,值是一个列表。

实际上,Stocks\u i\u own是一个字典

使用:


出于好奇:

#!/usr/bin/env python
goog = [12,132,124,234,234]
msft = [432,23,234,54,23]

num_days = 5
stocks_i_own = {'goog':50, 'msft':50}

for days in range(0,num_days):
    for stock_name in stocks_i_own: #simmilar stocks_i_own.keys()
    globals_bak = globals()
    for var_name, var_value in globals_bak.items():
        if var_name == stock_name:
            studied_stock = var_value
                print days, stock_name, studied_stock
                print studied_stock[days] #prints just 'g' not the value on day0
                print 'vaue on ', days, ' is ', studied_stock[days] *  stocks_i_own[stock_name]
我相信这会满足你的要求,但我肯定会把它们放到字典里。(我只是将此作为一个示例发布,说明您可以使用Python做些什么,但这并不意味着您应该这样做)

内置函数
globals()

此外,该部分还有一个问题,即:

for stock in stocks_i_own:
    #[...]
    print stock[days] #prints just 'g' not the value on day0
这是因为当你以dict()中x的
形式浏览字典时,
x
会得到键的值({}中x的
就像在{}.keys()中对x说
),所以在你的例子中,你得到的是字符串“goog”和字符串“msft”(不是其中包含的值),你在遍历字符串

您或多或少都在这样做:

>>> a="goog"
>>> for i in range(0,5):
...     print a[i]
... 
g
o
o
g
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
IndexError: string index out of range
>a=“goog”
>>>对于范围(0,5)内的i:
...     打印a[i]
... 
G
o
o
G
回溯(最近一次呼叫最后一次):
文件“”,第2行,在
索引器错误:字符串索引超出范围
Pyhton是一种语言,你一定要听Ben叔叔的话

权力大,责任大


:-)

您遇到的问题是,您在脚本中将股票名称用作字符串值和变量名称。以这种方式做事有许多(其他)问题,但这里有一个简单的解决方法:

goog = [12,132,124,234,234]
msft = [432,23,234,54,23]

num_days = 5
stocks_i_own = {'goog':50, 'msft':50}

for day in range(num_days):
    for stock in stocks_i_own:
        print day, stock, stocks_i_own[stock]
        stock_prices = eval(stock) # get list of prices with this stock's name
        print stock_prices[day]
        print 'value on ', day, ' is ', stock_prices[day] *  stocks_i_own[stock]
        print
通过Python内置的
eval()
函数,将给定的
stock
字符串值的字符串名称转换为当前同名变量的值,从而实现了这一点。此函数以与Python解释器相同的方式计算它在字符串参数中传递的表达式,并返回结果值。在这种情况下,表达式只是一个变量的名称,因此
stock_prices
只是成为
goog
msft
变量值的另一个名称

一个稍微好一点的方法是创建另一个类似于
stocks\u i\u own
的字典,其中包含每个相应命名股票的每日价格列表。这样,您就可以使用
stock
变量中保存的股票字符串名称,即相同的键对每个股票进行索引,以检索相应的数据。以下是我的建议:

num_days = 5
stocks_i_own = {'goog':50, 'msft':50}
stock_prices = {'goog': [12,132,124,234,234],
                'msft': [432,23,234,54,23]}

for day in range(num_days):
    for stock in stocks_i_own:
        print day, stock, stocks_i_own[stock]
        daily_prices = stock_prices[stock]
        print daily_prices[day]
        print 'value on ', day, ' is ', daily_prices[day] *  stocks_i_own[stock]
        print

可以使用较长的表达式
stock\u prices[stock][day]
代替单独的
daily\u prices
变量,但可能不太容易理解。

最好将这些列表放在字典中。这也会解决你的问题。@arxanas将此作为回答好的,我会尝试一下。谢谢@arxanas我会测试它,但如果你想把它作为一个答案,我会在它工作时接受。现在你会在
value[days]
-
value
上得到一个异常,它是一个整数+1,用于将python与蜘蛛侠关联起来。+2,如果你能为《黑暗骑士》这样做的话。。
goog = [12,132,124,234,234]
msft = [432,23,234,54,23]

num_days = 5
stocks_i_own = {'goog':50, 'msft':50}

for day in range(num_days):
    for stock in stocks_i_own:
        print day, stock, stocks_i_own[stock]
        stock_prices = eval(stock) # get list of prices with this stock's name
        print stock_prices[day]
        print 'value on ', day, ' is ', stock_prices[day] *  stocks_i_own[stock]
        print
num_days = 5
stocks_i_own = {'goog':50, 'msft':50}
stock_prices = {'goog': [12,132,124,234,234],
                'msft': [432,23,234,54,23]}

for day in range(num_days):
    for stock in stocks_i_own:
        print day, stock, stocks_i_own[stock]
        daily_prices = stock_prices[stock]
        print daily_prices[day]
        print 'value on ', day, ' is ', daily_prices[day] *  stocks_i_own[stock]
        print