我是python中的新手,我正在尝试找到解决这个问题的最佳方法,我需要了解这是否只能通过循环和函数来实现(不包括列表推导)。 我还需要找到更优雅的方法来解决这类问题, 简单的功能?递归性?列出理解?发电机功能?在本文的最后是我的尝试。谢谢。
我有这个清单:
base=[1,2]
alist=[1,2,3]
blist=[3,2,1]
我需要为每个“时间步骤”找到这个:
result(j)=base(j-1)+alist(j)-blist(j)
这是我需要找到的结果:
[1+1-3 2+1-3]
[1+1-3+2-2 2+1-3+2-2]
[1+1-3+2-2+3-1 2+1-3+2-2+3-1]
这是我的尝试:它不起作用,因为在每次迭代时我都要考虑以前的base值。我试过......
def calc(base,alist,blist):
lineNum=0
while lineNum < 3:
result=[]
for i in range(len(base)):
result.append(base[i]+alist[lineNum]-blist[lineNum])
print To
lineNum+=1
答案 0 :(得分:0)
尝试以下方法:
def calc(base, alist, blist):
for num in range(1, 4):
result = []
for b in base:
result.append(b + sum(alist[:num]) - sum(blist[:num]))
print result
以下是您提供的数据的结果:
>>> calc(base, alist, blist)
[-1, 0]
[-1, 0]
[1, 2]
或者,您可以在没有sum()
调用的情况下执行此操作,方法是保留之前的结果,只需添加/减去alist
和blist
中的下一个值,这可能会更有效:< / p>
def calc(base, alist, blist):
result = base[:]
for num in range(3):
for i, v in enumerate(result):
result[i] = v + alist[num] - blist[num]
print result
答案 1 :(得分:0)
您只想在每次迭代中添加列表和列表的下一个元素,以存储先前的值并将此元素添加到其中。
base=[1,2] alist=[1,2,3] blist=[3,2,1]""" [1+1-3 2+1-3]
[1+1-3+2-2 2+1-3+2-2]
[1+1-3+2-2+3-1 2+1-3+2-2+3-1] """
this_step = "" for ctr in range(len(alist)): this_step += "+%d -%d " % (alist[ctr], blist[ctr]) for num in base: print "%d %s " % (num, this_step), print "\n"
答案 2 :(得分:0)
你也可以使用numpy:
import numpy as np
def calc(bas, a, b):
r = bas.copy()
for i in range(a.size):
r += a.item(i)
r -= b.item(i)
yield r
base = np.array([1,2])
alist = np.array([1,2,3])
blist = np.array([3,2,1])
for result in calc(base, alist, blist):
print result
输出:
[-1 0]
[-1 0]
[1 2]