Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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 在zip()iterable上迭代_Python_List Comprehension - Fatal编程技术网

Python 在zip()iterable上迭代

Python 在zip()iterable上迭代,python,list-comprehension,Python,List Comprehension,我有两个相同大小的列表,一个是向量列表,第二个是它们各自的标签: l = [v1, v2,...] tags = [True,False,...] 我想做两个列表,所有(vi,tag)的标签都是真实的,这是赞美。 我正在尝试使用zip函数来实现以下功能: true_grp = [x for x in zip(l,tags) if x[1] is True] false_grp = [x for x in zip(l,tags) if x[1] is False] 两个列表都是空的。我看不出这

我有两个相同大小的列表,一个是向量列表,第二个是它们各自的标签:

l = [v1, v2,...]
tags = [True,False,...]
我想做两个列表,所有(vi,tag)的标签都是真实的,这是赞美。 我正在尝试使用zip函数来实现以下功能:

true_grp = [x for x in zip(l,tags) if x[1] is True]
false_grp = [x for x in zip(l,tags) if x[1] is False]
两个列表都是空的。我看不出这里有什么问题,“x”应该表示元组(vi,tag)

无需使用,您可以直接检查布尔值。
is
运算符用于检查对象标识,引用链接文档:

运算符是否测试对象标识:x为y为真 当且仅当x和y是同一对象。对象标识是 使用id()函数确定。x不是y,反之亦然 真值

代码

l = list(range(5))
tags = [True, False, True, False, False]

true_grp = [x for x in zip(l,tags) if x[1]]
false_grp = [x for x in zip(l,tags) if not x[1]]

print(true_grp)
print(false_grp)
输出

[(0, True), (2, True)]
[(1, False), (3, False), (4, False)]

您的解决方案应该可以正常工作,但为了清晰起见,您可以在列表中解包项目。注意:如果x,则应通过
测试布尔值
x

true_grp = [(value, flag) for value, flag in zip(l, tags) if flag]
false_grp = [(vale, flag) for value, flag in zip(l, tags) if not flag]
因为这些列表是链接的,所以最好使用字典来存储“真”和“假”值。A是方便的:

from collections import defaultdict

grp = defaultdict(list)
for value, flag in zip(l, tags):
    grp[flag].append(value)
然后使用
grp[0]
grp[False]
代替
False\u grp
;同样地,
grp[1]
grp[True]
代替
True\u grp


基于一次性字典的解决方案还具有适用于任意iterables
l
标记的优点。如果其中任何一个是迭代器,列表理解解决方案将不适用于
false\u grp
,因为一个iterable只能遍历一次。

您刚刚重新发明了
itertools.compress
(某种程度上)@code囤积器请参阅链接文档。您的解决方案对我有效