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