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