基于过滤器从python列表中删除元素
我有3个Python列表基于过滤器从python列表中删除元素,python,list,list-comprehension,Python,List,List Comprehension,我有3个Python列表 list_a = [10., 20., 30., 12.] list_b = [30., 20., 60., 12.] list_c = [10., 80., 90., 12.] 我想把那些元素放到list\u b和list\u c中,list\u a中的值是可以使用列表理解吗 你可以这样做: list_a = [10., 20., 30., 12.] list_b = [30., 20., 60., 12.] list_c = [10., 80., 90., 12.
list_a = [10., 20., 30., 12.]
list_b = [30., 20., 60., 12.]
list_c = [10., 80., 90., 12.]
我想把那些元素放到
list\u b
和list\u c
中,list\u a
中的值是可以使用列表理解吗
你可以这样做:
list_a = [10., 20., 30., 12.]
list_b = [30., 20., 60., 12.]
list_c = [10., 80., 90., 12.]
list_b = [ el for (i, el) in enumerate(list_b) if (list_a[i] > 15) ]
list_c = [ el for (i, el) in enumerate(list_c) if (list_a[i] > 15) ]
list_b = [ el for (i, el) in enumerate(list_b) if (i<len(list_a) and list_a[i] > 15) ]
Snipper是在这里写的,我还没有测试过,但是你可以看到它的基本思想
我假设所有列表的长度都相同。如果list_a
较短,并且您希望删除缺失位置上的元素,您可以这样做:
list_a = [10., 20., 30., 12.]
list_b = [30., 20., 60., 12.]
list_c = [10., 80., 90., 12.]
list_b = [ el for (i, el) in enumerate(list_b) if (list_a[i] > 15) ]
list_c = [ el for (i, el) in enumerate(list_c) if (list_a[i] > 15) ]
list_b = [ el for (i, el) in enumerate(list_b) if (i<len(list_a) and list_a[i] > 15) ]
如果您像您所说的那样使用numpy,那么在注释中,您可以简单地从a
创建一个布尔索引,并在b
和c
中屏蔽元素:
import numpy as np
list_a = np.array([10., 20., 30., 12.])
list_b = np.array([30., 20., 60., 12.])
list_c = np.array([10., 80., 90., 12.])
list_b = list_b[list_a>15]
list_c = list_c[list_a>15]
print list_a
print list_b
print list_c
输出:
[ 10. 20. 30. 12.]
[ 20. 60.]
[ 80. 90.]
您可以通过.tolist()
方法将列表b
和列表c
转换为Python列表类型。看
列表a=[10,20,30,12]
列表b=[30,20,60,12]
列表c=[10,80,90,12]
drop=[i表示枚举中的i,v(列表a),如果v您可以如下所示:
>>> list_a = [10., 20., 30., 12.]
>>> list_b = [30., 20., 60., 12.]
>>> list_c = [10., 80., 90., 12.]
>>>
>>> [j for i,j in zip(list_a, list_b) if i >= 15]
[20.0, 60.0]
>>>
>>> [j for i,j in zip(list_a, list_c) if i >= 15]
[80.0, 90.0]
您可以使用as编写一行程序来过滤列表:
list_b
和list_c
保存的最终值为:
>>> list_b
(20.0, 60.0)
>>> list_c
(80.0, 90.0)
没有循环?我不这么认为。也不应该list_b
是[30,20,60.,]
?您没有使用Numpy,是吗?使用Numpy数组可以很容易地做到这一点。@DavidZ我正在使用Numpy,有没有一种简洁的方法可以做到这一点?@snakecharmerb返回新列表是确定的。这不是一个完整的答案。请添加一个解释,以供将来参考
>>> list_a = [10., 20., 30., 12.]
>>> list_b = [30., 20., 60., 12.]
>>> list_c = [10., 80., 90., 12.]
>>>
>>> [j for i,j in zip(list_a, list_b) if i >= 15]
[20.0, 60.0]
>>>
>>> [j for i,j in zip(list_a, list_c) if i >= 15]
[80.0, 90.0]
list_b, list_c = zip(*[(b, c) for a, b, c in zip(list_a, list_b, list_c) if a>15])
>>> list_b
(20.0, 60.0)
>>> list_c
(80.0, 90.0)