Python 列表理解混乱

Python 列表理解混乱,python,Python,我对自己遇到的一个问题感到有点困惑,不知道是否有人能帮我(在我看来,这似乎微不足道,所以我希望这是真的!) 基本上,我通过以下列表进行了筛选: depfilt = [s for s in department if 'author' not in s] (其中部门有154个元素,产生的depfilt有72个元素) 现在,我还有一个单独的iD值列表,包含154个元素(sub),该列表的索引与部门中的索引匹配。我希望在过滤过程后保留正确的iD值,因此使用了以下代码行: subfilt = [s f

我对自己遇到的一个问题感到有点困惑,不知道是否有人能帮我(在我看来,这似乎微不足道,所以我希望这是真的!)

基本上,我通过以下列表进行了筛选:

depfilt = [s for s in department if 'author' not in s]
(其中部门有154个元素,产生的depfilt有72个元素)

现在,我还有一个单独的iD值列表,包含154个元素(
sub
),该列表的索引与
部门中的索引匹配。我希望在过滤过程后保留正确的iD值,因此使用了以下代码行:

subfilt = [s for s in subj if 'author' not in department[subj.index(s)]]
在我看来,我觉得这应该是有效的,但subfilt实际上返回了106个列表元素,而不是72个

有人知道为什么吗


谢谢

如果值重复,请使用
枚举
而不是
索引

[s for i, s in enumerate(subj) if 'author' not in department[i]]

如果
部门
主体
的顺序完全相同,即每个匹配的对应元素,则使用同时迭代两个列表:

[(d, s) for d, s in zip(department, subject) if 'author' not in d]
(对科室使用
d
,对受试者使用
s

这样就不需要按索引引用每个元素。只是标准的迭代

编辑:如果您希望将列表分开,那么您可以按照已有的方式对
部门执行第一步,然后修改主题的第二个循环,这样,在循环两个主题时仍然过滤“作者”:

[s for d, s in zip(department, subject) if 'author' not in d]
(因此,
d
的值在第二个循环中被忽略)

输出示例:

>>> department = ['something', 'else', 'author', 'okay']
>>> subject = ['some_subj', 'else_subj', 'author_subj', 'okay_subj']
>>> [(d, s) for d, s in zip(department, subject) if 'author' not in d]
[('something', 'some_subj'), ('else', 'else_subj'), ('okay', 'okay_subj')]
>>>
>>> # and if you MUST do them seprately:
... [s for s in department if 'author' not in s]  # that's your `deepfilt`
['something', 'else', 'okay']
>>> [s for d, s in zip(department, subject) if 'author' not in d]  # this is for `subfilt`
['some_subj', 'else_subj', 'okay_subj']

这个方法的输出是什么,列表是否保持独立?结果是得到一个列表,其中
d
s
的元组成对出现。我认为这个方法对我来说的问题是我必须对列表进行进一步过滤,或者这相对简单吗?编辑我的答案,这样你仍然可以得到两个单独的列表。使用原始的第一个循环和已编辑的第二个循环。如果要进行进一步筛选,则不要使用两个单独的循环,而是按照我的原始循环一起进行。通过这种方式,每一组过滤项都被分组在一个元组中,如果需要,您可以稍后将其分离出来。而且,您不必在不同的循环中不断重复筛选条件(容易出错和重复)。