簡體   English   中英

如果沒有列表理解,我該如何解決這個問題

[英]How can I solve this without list comprehensions

我是 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

嘗試以下操作:

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]

或者,您可以通過保留先前的結果並僅從alistblist中添加/減去下一個值來在不調用sum()的情況下執行此操作,這可能更有效:

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

您只想在每次迭代中添加 alist 和 blist 的下一個元素,因此存儲前一個值並將此元素添加到其中。

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"

您也可以使用 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

Output:

[-1  0]
[-1  0]
[1 2]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM