假設我有一個 lista=[1, 3, 4, 5, 7]和另一個 list b=[0,0,1,1,3]。
現在我想過濾a以創建一個新串列,其中對應的位置b是 0 或 3。如果我只想b為 0,那很簡單a = a[b==0],但現在它是基于子集的過濾。我所做的是:
subset = [0, 1]
a = a[b in subset]
這是不正確的,錯誤是:ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我想知道這樣做的正確方法是什么。謝謝!
uj5u.com熱心網友回復:
如果我正確理解您的問題,那么您正在尋找np.isin:
a = np.array([1, 3, 4, 5, 7])
b = np.array([0, 0, 1, 1, 3])
print(a[np.isin(b, [0, 3])])
印刷:
[1 3 7]
uj5u.com熱心網友回復:
new_list = [i[0] for i in zip(a,b) if i[1] in [0,1]]
這使用了一個稱為串列理解的概念。
它首先創建一個看起來像的 zip 物件
[(1, 0), (3, 0), (4, 1), (5, 1), (7,3)]
串列理解回圈遍歷所有元組,并過濾??第二個元素為 0 或 1 的所有元組。并回傳其中的第一部分
uj5u.com熱心網友回復:
你可以用filter,
In [18]: d = dict(zip(a,b))
In [19]: list(filter(lambda x:d.get(x) in (0,1), d))
Out[19]: [1, 3, 4, 5]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/516080.html
標籤:Python列表麻木的
上一篇:為pandasMultiIndexDataFrame中的所有唯一索引創建嵌套陣列
下一篇:使用numpy陣列處理資料
