假設我有一個陣列:
a = [0.42, 0.18, 1.54, 2.9, 1.81, 2.35, 0.18, 1.54, 2.92]
它具有以下(逐元素)邏輯狀態:
[False, True, False, False, False, False, True, False, False]
有沒有一種很好的方法來使用串列理解來只將 True 元素添加到新串列中?附加問題: a 中的真正元素應在之后彈出(因為它們現在已經被處理了)
uj5u.com熱心網友回復:
你可以這樣做:
>>> a = [0.42, 0.18, 1.54, 2.9, 1.81, 2.35, 0.18, 1.54, 2.92]
>>> b = [False, True, False, False, False, False, True, False, False]
>>> c = [num for num, truth_value in zip(a, b) if truth_value]
>>> c
[0.18, 0.18]
如果您覺得難以理解,請從評論中告訴我。
uj5u.com熱心網友回復:
只是為了提供替代方案,這也可以使用itertools.compress(Python 3.1 或更高版本)來完成。compress(a, b)制作一個迭代器,它提供a其對應元素 inb評估為真的元素。
例如:
>>> a = [0.42, 0.18, 1.54, 2.9, 1.81, 2.35, 0.18, 1.54, 2.92]
>>> b = [False, True, False, False, False, False, True, False, False]
>>>
>>> c = list(itertools.compress(a, b))
>>> c
[0.18, 0.18]
仍然有必要a使用串列推導或相同的技術從 中洗掉這些元素,但翻轉布林值,這有點不那么優雅:
a = list(compress(a, (not x for x in b)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/335421.html
上一篇:我的迭代只會回傳我串列中的最后一項,而不是一次回傳每個專案以傳遞給另一個函式以在主串列中使用
下一篇:在回圈串列中查找缺失的序列
