使用列表理解而不是通常的for循环从重复成员中删除列表

时间:2019-02-15 18:43:18

标签: python for-loop list-comprehension

我了解到,如果要创建列表,可以使用所谓的列表理解来使python“ for循环”更短。例如,代替编写:

b = []
a = [2, 3, 5]
for x in a:
    b.append(x**2)

我可以这样编写代码:

b = [x**2 for x in a]

我想知道如何将以下代码转换为第二种较短的格式:

lst = [1, 2, 3, 3, 4, 5, 5]
u_lst = []
for x in lst:
    if x not in u_lst:
        u_lst.append(x)

2 个答案:

答案 0 :(得分:0)

正如@PritoshSingh在评论中指出的那样,涉及对已经在同一列表中构造的项目的引用的列表构造不适合使用列表理解,这最适合用于基于以下内容的值映射和/或过滤:不涉及列表自身构建的条件。

您要描述的问题可以通过使用dict.from_keys方法来最好地解决,该方法会忽略从给定序列中读取的已经看到 的项目:

u_list = list(dict.from_keys(lst))

如果您使用的Python 3.6或更早版本无法保证dict键的顺序,请使用collections.OrderedDict代替dict

答案 1 :(得分:0)

从给出的特定示例看来,您似乎希望u_lst仅是唯一值的列表。如果是这样,则不需要任何列表理解,只需在原始列表上使用set

lst = [1, 2, 3, 3, 4, 5, 5]
u_lst = list(set(lst))

在不转换为列表的情况下输出{1, 2, 3, 4, 5},并输出[1, 2, 3, 4, 5]

请注意,在列表上使用set会产生一个集合,以使其表现为列表,然后将其转换为上述列表。