基本上,给定一个字母列表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。我刚刚开始学习如何使用列表理解功能,我有点累了,所以我看不到哪里或做错了什么:(
列表推导在这种情况下将不起作用,因为它适用于变量的已保存状态。因此,早期的l2是空白的,并且将在理解中考虑该状态。因此,输出将包含所有元素。我可以注意到的是,您正在尝试获取'l'的唯一元素。
您可以使用,
l2 = set(l) # if rlist is required you can type cast it back to list like, l2 = list(set(l))
这里的列表理解不起作用,因为l2
仅在完成所有列表理解工作后才更新,因此不知道列表复合中间状态
您想要的只是每个字母的唯一实例,换句话说:set
l2 = set(l)
l2 = list(set(l)) # if you really want a list at the end
列表理解的问题在于它依赖于列表l2,而列表本身就是列表理解的目标。
有时候,列表理解并不是最好的方法,即使它是一个很好的工具。
出于您的目的,最好将列表l转换为一个集合(没有重复项),然后再转换回列表,该列表可以分配给您的列表l2:
l2 = list(set(l))