我仍然在python中挖掘,並且有一些事情是我的C++背景獲得的。例如,我有一個類python:迭代使用類方法
class crack(object):
def __init__(self, sz1,sz2):
self.z1 = sz1
self.z2 = sz2
def smallz_Z(self,z,z1,z2):
return z - 0.5*(z2-z1)
def get_pot(self,z):
Z = smallz_Z(z,self.z1,self.z2)
try:
result = np.sum(np.arange(self.n) * self.coeffs * (1.0/(cmath.sqrt(Z - 1.0) * cmath.sqrt(Z + 1.0)))
* ((Z - cmath.sqrt(Z - 1.0) * cmath.sqrt(Z + 1.0)) ** np.arange(self.n))) * (2.0/(self.z2 - self.z1))
我要創造裂紋元素的列表,
crack_list = []
crack_list.append(crack(z1,z2)) ...
現在我需要使用一個迭代器來獲取潛在的所有值, matplotlib輪廓函數的例子。我不能做這樣的事情:
result = np.sum(crack_list.get_potential(z))
現在我正在做的「傳統」的方式:
def potential_value(z, crack_list):
potential = complex(0, 0)
for element in crack_list:
potential = potential + element.get_potential(z)
return potential
,如果我用一個for循環,它說,該元素裂紋不可迭代。比方說,我試着
x = np.linspace(self.x1, self.x2, self.step)
y = np.linspace(self.y1, self.y2, self.step)
X, Y = np.meshgrid(x, y)
Z = X +1j*Y
F = np.vectorize(potential_value)
但在這裏我有一個問題:
F(Z, crack_list)
for element in crack_list:
TypeError: 'crack' object is not iterable
我怎麼能這樣做?謝謝。
編輯:謝謝你的答案。我仍然知道列表的理解,所以它仍然擊敗我。比方說,我想改變我的列表理解的實施,使我改變功能
def potential_value(z_list, crack_list, u_flow):
return [np.sum([c.get_potential(z) for c in crack_list]) + u_flow.get_potential_no_c(z) for z in z_list]
當我試圖在同一時間,現在用兩個列表解析,所以潛力將返回一個數組所有z_list變量的所有結果 - 注意z_list應該是複雜類型的列表。有沒有辦法做到這一點只爲z_list中的一個複雜的值,沒有不得不通過一個列表只有一個值?或者我必須做某種測試?
等等!你似乎試圖遍歷一個破解對象列表,而不是一個單一的破解。在我看來,crack_list不包含列表對象,而是包含一個列表對象。你能證實嗎? – batbrat 2011-03-28 14:55:45