簡體   English   中英

有沒有辦法找到從 Python 迭代生成的最后一個列表(不是最后一個值)?

[英]Is there a way for finding the last list(not the last value) generated from Python iteration?

A = 300
Delta = 0.01
p0 = 100
ev0 = 0
dev = 0.001
dp0 = A*p0*dev
p = []
dp = []
ev = []


class Nonlinear():
    def __init__(self):
        self.p, self.dp, self.ev = p0, 0, ev0-dev

    def __iter__(self):
        return self

    def __next__(self):
            self.dp, self.p, self.ev = A*(self.p+self.dp)*dev, self.p + self.dp, self.ev+dev
            p.append(self.p)
            dp.append(self.dp)
            if self.p > 1500:
                raise StopIteration()
            return p


for n in Nonlinear():
    print(n)

以上是我在迭代中用來代替Excel的所有代碼。 結果總是為我提供所有迭代列表,而不是我需要的最后一個。 我想知道:

  1. 如果有辦法找到 Python 3.8 中的最后一個列表。
  2. 由於計算結果將被用於 plot 一個使用 matplotlib 的數字,我想通過迭代獲得 p 和 ev 的關系。 此外,將 swift 列表轉換為 numpy 數組以及獲得 p 和 ev 的最后迭代列表(包括所有 evalues)也非常重要。

我使用 Python 3.8。 如果您對解決問題有任何想法。 請告訴我。

我認為這可以滿足您的需求:

class Nonlinear():
    def __init__(self, p0 = 100, dp0 = 0, A = 300, dev = 0.001, maxval = 1500):
        self.p = p0
        self.dp = dp0
        self.A = A
        self.dev = dev
        self.maxval = maxval

    def __iter__(self):
        while self.p + self.dp <= self.maxval:
            self.p += self.dp
            self.dp = self.A * (self.p + self.dp) * self.dev
            yield self.p
            
n = Nonlinear()
print(*n)
# 100 130.0 178.0 245.8 339.88 470.068 650.1448 899.21128 1243.694608

或者

n = [_ for _ in Nonlinear()]
# [100, 130.0, 178.0, 245.8, 339.88, 470.068, 650.1448, 899.21128, 1243.694608]

你也可以寫成一個生成器:


def nonlinear(p = 100, dp = 0, A = 300, dev = 0.001, maxval = 1500):
    Adev = A * dev
    while(p + dp <= maxval):
        p += dp
        dp = Adev * (p + dp)
        yield p

請注意,請注意如何定義變量。 像我上面所做的那樣逐行輸入它們給出了p的不同答案,而不是按照你的方式將它們列在一行中。

暫無
暫無

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

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