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

2024-09-28 03:14:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用zip函数创建的元组列表。zip将四个列表组合在一起:narrativesubjectactivity、和{},每一个列表都是0和1的列表

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

现在,我将zip将它们组合在一起,以获得一个布尔值列表,指示它们中是否有True。在

{cd9}

我现在遇到的问题是,获取第二个元组列表,如果在迭代过程中变量的名称为1,则返回这些元组的名称。我想应该是这样的:

^{pr2}$

我就是不知道该怎么办。我想要的输出如下所示:

reason
# ["subject", "subject, filer", "filer", "subject, activity"]

我对Python有点陌生,如果解决方案很简单,我很抱歉。在


Tags: 函数名称true列表过程activityzip元组
3条回答

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

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

解决方案:

^{pr2}$

也可以使用^{}编写:

^{3}$

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

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

如果需要保留订单,请使用^{},如下所示:

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(...)调用不再适合一行,请考虑使用字典。在

您可以使用comprehension语法的过滤方面来获得 只有当相应的国旗为真时,您的有效英文名称:

variables = ("narrative", "subject", "activity", "filer")
[tuple (name for flag, name in zip(x, variables) if x)  for x in zip(narrative, subject, activity, filer)]

也就是说,你的方法有点可疑-你可能会(远)更好地使用面向对象的方法,而不是尝试手动协调每个主题的独立变量序列。在

使用zip(narrative, subject, activity, filer)基本上可以转换矩阵(您的等长度列表组成矩阵)。然后通过这些枚举来查找标志为true的位置n,并为适当的变量编制索引。在

narrative = [0, 0, 0, 0]
subject = [1, 1, 0, 1]
activity = [0, 0, 0, 1]
filer = [0, 1, 1, 0]
variables = ("narrative", "subject", "activity", "filer")
# ========================================================

new_list = [[variables[n] for n, flag in enumerate(indicators) if flag] 
            for indicators in zip(narrative, subject, activity, filer)]
>>> new_list
[['subject'], ['subject', 'filer'], ['filer'], ['subject', 'activity']]

要查看转置:

^{pr2}$

相关问题 更多 >

    热门问题