2013-11-21 162 views
-1

是否有一种快速简便的方法,在覆盖与另一个列表中的元素(相同长度)中的元素相对应的列表中的元素时,其计算花费不大?Python覆盖列表元素

iterates = input("How many iterates: ") 
trials = input("How many trials: ") 

aggregateList = [iterates] 

def function(): 
    recordList = [] 

    for i in range(iterates): 
     # math goes here 
     recordList.append() 

    aggregateList[i] += recordList[i] 

for i in range(trials): 
    function() 

问题是从aggregateList[i] += recordList[i]即将来临别的东西,将工作任何想法?假设recordList [i]中的值为第一个“迭代”为5,第二个为5,第三个为5,此时aggregateList [i]应该为15.

+0

你的问题有点混乱,很难理解你的应用程序是什么。你不能用字典吗?你追加到recordList的是什么?你的aggregateList到底是什么? aggregateList = [iterates]的目的是什么? –

+0

我正在做科学计算.. recordList的第一个元素是一个初始条件,通常是零或1,从那里应用一个公式并将其值发送到recordList [i + 1](如果应用该函数到recordList [i])。我希望aggregateList是recordList的每个试验的总和 – Jared

+0

即使它不会以自己的名字命名,函数的第一个循环将会产生list1,i = 2会产生list 2,等等...我希望aggregateList在第i个地方能够容纳值list1 [i] + list2 [i] + list3 [i] + ... list_range [i] – Jared

回答

3

我认为您正在寻找:

aggregateList += recordList 

aggregateList.append(recordList) 

取决于您是否希望您汇总将持平或嵌套。

并将aggregateList = [iterates]更改为aggregateList = []

这是我个人会实现它:

iterates = input("How many iterates: ") 
trials = input("How many trials: ") 

def function(): 
    recordList = [] 

    for i in range(iterates): 
     # math goes here 
     recordList.append() 

    return recordList 

aggregateList = [] 
for i in range(trials): 
    aggregateList.append(function()) 

甚至:

def calculate (i): pass #math goes here 
#nested: 
aggregateList = [[calculate(i) for i in range(iterates)] for _ in range(trials)] 
#flat: 
aggregateList = [x for trial in ([calculate(i) for i in range(iterates)] for _ in range(trials)) for x in trial] 
+0

现在我得到了UnboundLocalError ,而之前我得到索引错误 – Jared

+0

是真的,为了分配给一个全局变量,你必须声明它是这样的。将'global aggregateList'作为'function'的第一行插入。 – Hyperboreus

+1

@Questioneer请参阅编辑我的答案。我包括一个完整的例子。 – Hyperboreus

0

让我们假设你已经有一个列表的列表(在变量名列表)。这会在你调用你的'function()'函数(不是最大的函数名)之后,并将你的记录列表收集到列表中。

trials = 3 
lists = [[1,2,3],[4,5,6],[7,8,9]] 

for i in range(trials): 
    aggregateList = [reduce(lambda x, y: x+y, [listn[i] for listn in lists]) for i in range(trials)] 

print aggregateList 

将输出

[12, 15, 18] 

我认为这是解你正在寻找的类型。

reduce是函数式编程的一个有趣功能。它允许您将匿名函数lambda连续应用于列表项,然后返回累计值。所以在这种情况下,它正在执行(1 + 4)+7,(2 + 5)+8,(3 + 6)+9。我们正在应用的列表reduce通过理解来构建,以从列表内的列表中提取i。对reduce的调用被包装在另一个理解中以返回结果列表。

+0

这个回答是回应上面OP的评论。 –

0

所以iterates是一个数字像4,和trials另一个类似3.

aggregateList = [iterates] 

现在aggregateList = [4]。那是什么目的?

def function(): 
    recordList = [] 

    for i in range(iterates): 
     # math goes here 
     recordList.append() 

你在追加什么recordList?最后一行应该产生这样的错误:append() takes exactly one argument (0 given)

aggregateList[i] += recordList[i] 

是什么i在这一点?上述迭代的最后一个值,即iterates-1 =3,或者应该是trials迭代器。您目前有多少项目aggregateList?正如我所写,我期望它给出一个错误:IndexError: list assignment index out of range

for i in range(trials): 
    function() 

什么是'问题'?你得到了什么错误信息或不好的结果?

我怀疑你更熟悉另一种语言,并试图将其成语应用于Python。另外,在担心效率之前先让计算工作。在某些时候,尽管您可能想要使用添加数组的numpy,并且可以一次对整个数组执行数学运算。