使列表理解的过滤列表不起作用

问题描述 投票:0回答:3

基本上,给定一个字母列表l,我想过滤一个字母列表,以便在新列表中仅包含所述字母的一个实例:

l2 = []
for i in l:
    if i not in l2:
        l2.append()

而且我想使用列表理解,所以我写道:

l2 = [i for i in l if i not in l2]

但是它给我返回了一个空的l2。我刚刚开始学习如何使用列表理解功能,我有点累了,所以我看不到哪里或做错了什么:(

python syntax list-comprehension
3个回答
1
投票

列表推导在这种情况下将不起作用,因为它适用于变量的已保存状态。因此,早期的l2是空白的,并且将在理解中考虑该状态。因此,输出将包含所有元素。我可以注意到的是,您正在尝试获取'l'的唯一元素。

您可以使用,

l2 = set(l) # if rlist is required you can type cast it back to list like, l2 = list(set(l))

0
投票

这里的列表理解不起作用,因为l2仅在完成所有列表理解工作后才更新,因此不知道列表复合中间状态

您想要的只是每个字母的唯一实例,换句话说:set

l2 = set(l)
l2 = list(set(l)) # if you really want a list at the end

0
投票

列表理解的问题在于它依赖于列表l2,而列表本身就是列表理解的目标。

有时候,列表理解并不是最好的方法,即使它是一个很好的工具。

出于您的目的,最好将列表l转换为一个集合(没有重复项),然后再转换回列表,该列表可以分配给您的列表l2:

l2 = list(set(l))
© www.soinside.com 2019 - 2024. All rights reserved.