python函数从列表中获取参数

标签 python list function

我对编程有点陌生,并且在运行和获取它从列表中获取输入参数时遇到问题。这是我当前的代码:

import pandas as pd
import numpy as np
from pandas.io.data import DataReader
from datetime import datetime

def pairfinder(ticker1, ticker2):

   symbols = [ticker1, ticker2]
   stock_data = DataReader(symbols, "yahoo", datetime(2011,1,1), datetime(2011,12,31))

   price = stock_data['Adj Close']
   returns = np.log(price / price.shift(1))
   diff = (returns[ticker1] - returns[ticker2])**2

   mindif = ((1/(returns[ticker1].count()))*diff.sum())
   corr = (returns[ticker1].corr(returns[ticker2]))
   print(ticker1, ticker2, mindif, corr)



tickers = ['AKSO.OL', 'BWLPG.OL', 'DETNOR.OL', 'DNB.OL', 'DNO.OL', 'FOE.OL', 'FRO.OL']

该函数从雅虎财经下载股票数据,并将调整后的收盘价放入数据框中,然后计算 yield ,并取它们之间的平方差并将其相加。最后,它显示两个股票代码、平方差之和的结果以及两只股票之间的相关性。

现在的问题是,我想让这个函数运行整个股票代码列表,并且我希望它获取第一个股票代码 AKSO.OL 并在其上运行该函数以及所有其余的股票代码,然后继续下一个并做同样的事情。我尝试构建一个 for 循环来执行此操作,但我不太稳定地使用 for 循环并将其与函数结合起来。

最后我想将结果放入另一个数据框中并将其保存为 csv 文件或类似的文件,但我想如果有人能指出我的正确方向,我可以自己解决这个问题问题第一部分的方向。

最佳答案

如果我正确理解您的问题,可能会这样做:

for t1 in tickers:
    for t2 in tickers:
        if t2 == t1:
            continue
        print "t1=%s, t2=%s" % (t1, t2)
        pairfinder(t1, t2)

产生

t1=AKSO.OL, t2=BWLPG.OL
t1=AKSO.OL, t2=DETNOR.OL
t1=AKSO.OL, t2=DNB.OL
t1=AKSO.OL, t2=DNO.OL
t1=AKSO.OL, t2=FOE.OL
t1=AKSO.OL, t2=FRO.OL
t1=BWLPG.OL, t2=AKSO.OL
t1=BWLPG.OL, t2=DETNOR.OL
t1=BWLPG.OL, t2=DNB.OL
t1=BWLPG.OL, t2=DNO.OL
t1=BWLPG.OL, t2=FOE.OL
t1=BWLPG.OL, t2=FRO.OL
t1=DETNOR.OL, t2=AKSO.OL
t1=DETNOR.OL, t2=BWLPG.OL
t1=DETNOR.OL, t2=DNB.OL
t1=DETNOR.OL, t2=DNO.OL
t1=DETNOR.OL, t2=FOE.OL
t1=DETNOR.OL, t2=FRO.OL
t1=DNB.OL, t2=AKSO.OL
t1=DNB.OL, t2=BWLPG.OL
t1=DNB.OL, t2=DETNOR.OL
t1=DNB.OL, t2=DNO.OL
t1=DNB.OL, t2=FOE.OL
t1=DNB.OL, t2=FRO.OL
t1=DNO.OL, t2=AKSO.OL
t1=DNO.OL, t2=BWLPG.OL
t1=DNO.OL, t2=DETNOR.OL
t1=DNO.OL, t2=DNB.OL
t1=DNO.OL, t2=FOE.OL
t1=DNO.OL, t2=FRO.OL
t1=FOE.OL, t2=AKSO.OL
t1=FOE.OL, t2=BWLPG.OL
t1=FOE.OL, t2=DETNOR.OL
t1=FOE.OL, t2=DNB.OL
t1=FOE.OL, t2=DNO.OL
t1=FOE.OL, t2=FRO.OL
t1=FRO.OL, t2=AKSO.OL
t1=FRO.OL, t2=BWLPG.OL
t1=FRO.OL, t2=DETNOR.OL
t1=FRO.OL, t2=DNB.OL
t1=FRO.OL, t2=DNO.OL
t1=FRO.OL, t2=FOE.OL

基本上,它会遍历代码列表,并将该函数应用于每个代码 (t1) 以及跳过 t1 的所有其他代码 (t2)。

注意:它允许重复相同的对(即 t1、t2 与 t2、t1 不同)。如果这不是所需的行为,请使用 itertools.combinations (如下面您得到的另一个答案中所述)。

事实上,最好的方法是通过 itertools.permutations

import itertools
for ticker1, ticker2 in itertools.permutations(tickers, 2):
        print "t1=%s, t2=%s" % (ticker1, ticker2)

关于python函数从列表中获取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31698662/

相关文章:

javascript - Mini-Max Sum - 使用 JavaScript 返回两个(或更多)间隔数字

function - Go 的 struct 方法在调用中抛出太多参数

python - 遍历 pandas 数据框中的列表元素 - 每个条目都有不同的大小,需要生成一个新列 w.r.t 列表中的每个条目

python - 如何检查具有列表或字典的元组是否为空

python - 如何比较 2 个相同长度列表中的确切列表元素?

list - 是否有不同语言的初始列表容量的比较?

MySql 5.1.32 : call another procedure within a stored procedure and set variable

python - SQLite3 和多处理

Python:将 numpy 字符串数组转换为数字数组的最快方法

Python - 从另一个列表中删除一组列表