numpy的的ndarray
類定義爲numpy.ndarray的迭代行爲來自哪裏?
class ndarray(__builtin__.objects)
據我所知,__builtin__.objects
不是迭代類型?出於這個原因,我覺得這種行爲令人吃驚:
Arr = numpy.array('As Far As I Know'.split())
=> array(['As', 'Far', 'As', 'I', 'Know'], dtype='|S4')
print map(lambda x: x[0],Arr)
=> ['A', 'F', 'A', 'I', 'K']
或者這是否來自傳遞到ndarray
的__init__
方法(list
)對象的屬性?但是爲什麼我不能在數組對象上使用像list.reverse
這樣的方法,如果它內部存儲爲列表?
(作爲一個邊不沒有人知道什麼更好的辦法來ndarray
對象中的每個元素應用字符串操作?)
Guido將'map'和'lambda'列爲「python regrets」,所以我傾向於使用列表推導,例如'np.array([k [0] for k in x]' – wim
是的,據我所知,我緊跟這一辯論(據我所知,他討厭'reduce'和'lambda',但不一定是'map'),但在上面的例子中'x'是一個使用'map'和'lambda'的局部變量;正如你所示,'k'在使用列表理解方面是全球性的。出於這個原因,我無法接受列表解析。 – hatmatrix
@crippledlambda:在Python 3中,列表解析的循環變量不會再泄漏到封閉範圍。如果你想在Python 2中避免這種泄漏,你可以將'[... for x in a]'轉換爲'list(... for x in a)''。 –