Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何基于另一个列表获取列表的子列表?_Python_List_Indexing_List Comprehension - Fatal编程技术网

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]
。但是,Python
list
对象不支持向量化操作。使用
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]