Python 如何基于另一个列表获取列表的子列表?
我想在Python 如何基于另一个列表获取列表的子列表?,python,list,indexing,list-comprehension,Python,List,Indexing,List Comprehension,我想在b中找到元素的子列表,以便a中的对应项大于10: a = [12,3,8,14] b = ['a','b','c','d'] 这段代码可以正常工作,但是有没有像R中的b[a>10]这样更简单的方法?Zip b_even = [b[i] for i, e in enumerate(a) if e > 10] 通常的解决方案是使用zip: import numpy as np a = np.array(a) b = np.array(b) c = b[np.where(a>1
b
中找到元素的子列表,以便a
中的对应项大于10
:
a = [12,3,8,14]
b = ['a','b','c','d']
这段代码可以正常工作,但是有没有像R中的
b[a>10]
这样更简单的方法?Zip
b_even = [b[i] for i, e in enumerate(a) if e > 10]
通常的解决方案是使用
zip
:
import numpy as np
a = np.array(a)
b = np.array(b)
c = b[np.where(a>10)]
可以通过运算符进行功能替代。itemgetter
和enumerate
:
res = [i for i, j in zip(a, b) if j > 10]
对于矢量化功能/语法,您可以使用第三方库,如NumPy。我的第一选择是您所拥有的,但我可以使用
from operator import itemgetter
res = itemgetter(*(idx for idx, val in enumerate(a) if val > 10))(b)
您已经有了“Pythonic”方法来使用列表来完成此操作。您建议的较短语法可用于
numpy
数组。在Python中,我将使用[y代表x,如果x>10,则在zip(a,b)中使用y]
。但是,Pythonlist
对象不支持向量化操作。使用numpy
和pandas
在zip和numpy方法之间进行比较,哪种方法更快?谢谢!这helps@Jensen,没问题。你应该给出一个有用的答案(左边绿色的勾号)。numpy数组方法比zip for list快吗?我还没有测试过,但numpy通常比zip和list快
res = [i for i, j in zip(a, b) if j > 10]
from operator import itemgetter
res = itemgetter(*(idx for idx, val in enumerate(a) if val > 10))(b)
[s[1] for s in zip(a, b) if s[0] > 10]