【发布时间】:2016-02-22 16:42:38
【问题描述】:
我有一个使用zip 函数创建的元组列表。 zip 汇集了四个列表:narrative、subject、activity 和 filer,每个列表都只是 0 和 1 的列表。假设这四个列表如下所示:
narrative = [0, 0, 0, 0]
subject = [1, 1, 0, 1]
activity = [0, 0, 0, 1]
filer = [0, 1, 1, 0]
现在,我将 zip 将它们放在一起以获取布尔值列表,指示它们中是否有任何 True。
ny_nexus = [True if sum(x) > 0 else False for x in zip(narrative, subject, activity, filer)]
我现在遇到的问题是获取第二个元组列表,如果它在迭代期间为 1,则返回变量的名称。我想它看起来像这样:
variables = ("narrative", "subject", "activity", "filer")
reason = [", ".join([some code to filter a tuple]) for x in zip(narrative, subject, activity, filer)]
我只是不知道该怎么做。我想要的输出如下所示:
reason
# ["subject", "subject, filer", "filer", "subject, activity"]
我对 Python 有点陌生,所以如果解决方案很简单,我深表歉意。
【问题讨论】:
-
对了,你可以说
ny_nexus = [sum(x) > 0 for x in zip...] -
总是欣赏更简洁的代码。谢谢
-
更好的是,使用
any()内置函数 ;)any([0, 0, 0]) == False,any([0, 1, 0]) == True。所以,ny_nexus = [any(x) for x in zip...]