gpt4 book ai didi

python - 在 Python 中用另一个元组过滤一个元组

转载 作者:太空狗 更新时间:2023-10-30 01:13:22 26 4
gpt4 key购买 nike

我有一个使用 zip 函数创建的元组列表。 zip 汇集了四个列表:narrativesubjectactivityfiler ,其中每个只是 0 和 1 的列表。假设这四个列表如下所示:

narrative = [0, 0, 0, 0]
subject = [1, 1, 0, 1]
activity = [0, 0, 0, 1]
filer = [0, 1, 1, 0]

现在,我将它们zip在一起以获得一个 bool 值列表,指示它们是否为 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 有点陌生,如果解决方案很简单,我深表歉意。

最佳答案

将元组存储在字典中以获得更清晰的解决方案:

tups = {'narrative': narrative,
'subject': subject,
'activity': activity,
'filer': filer}

解决方法:

reason = [', '.join(k for k, b in zip(tups, x) if b) for x in zip(*tups.values())]

也可以用itertools.compress来写:

from itertools import compress
reason = [', '.join(compress(tups, x)) for x in zip(*tups.values())]

上面的解决方案不保留元组的顺序,例如他们可以返回类似的东西

['subject', 'filer, subject', 'filer', 'activity, subject']

如果您需要保留顺序,请使用 collections.OrderedDict如下图:

from collections import OrderedDict

tups = OrderedDict([
('narrative', narrative),
('subject', subject),
('activity', activity),
('filer', filer)
])

# The result is ['subject', 'subject, filer', 'filer', 'subject, activity']

编辑:不涉及字典的解决方案:

from itertools import compress
reason = [', '.join(compress(variables, x))
for x in zip(narrative, subject, activity, filer)]

如果 zip(...) 调用不再适合一行,请考虑使用字典。

关于python - 在 Python 中用另一个元组过滤一个元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35559061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com