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_List Comprehension - Fatal编程技术网

基于过滤器从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.

我有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_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)