[英]How to get a sublist of a list based on another list?
a = [12,3,8,14]
b = ['a','b','c','d']
我想找到的元素的子列表b
,使得在相應的項目a
是大於10
:
b_even = [b[i] for i, e in enumerate(a) if e > 10]
這段代碼可以正常工作,但是在R中有沒有更簡單的方法,例如b[a>10]
?
壓縮?
print([[*i] for i in list(zip(a,b)) if i[0] > 10])
[[12, 'a'], [14, 'd']]
常規解決方案是使用zip
:
res = [i for i, j in zip(a, b) if j > 10]
通過operator.itemgetter
和enumerate
可以實現功能替代:
from operator import itemgetter
res = itemgetter(*(idx for idx, val in enumerate(a) if val > 10))(b)
對於矢量化功能/語法,您可以使用第三方庫,例如NumPy。
import numpy as np
a = np.array(a)
b = np.array(b)
c = b[np.where(a>10)]
我的第一選擇將是您擁有的東西,但使用可以獲得相同的結果。
[s[1] for s in zip(a, b) if s[0] > 10]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.