-2

我需要帮助将以下代码缩短为一行。

for i in objects:
    if i not in uniq: 
        uniq.append(i)

我只是为了挑战而这样做,而不是保留这个。

4

3 回答 3

3

最简单的 oneliner 是使用set

uniq = set(objects)

如果你真的需要一个列表,你当然可以从集合中创建一个:

uniq = list(set(objects))
于 2020-12-06T20:29:05.543 回答
1

您可以使用列表推导,尽管出于多种原因这是一个坏主意

uniq=[]
objects= [9,9,1,2,3,4,5,5,9,9,15,12,33]
[uniq.append(i) for i in objects if i not in uniq]
print(uniq)

输出:

[9, 1, 2, 3, 4, 5, 15, 12, 33]

首先,从样式/可读性的角度来看,它令人困惑,它是“隐式而不是显式”的,它不会为您的 FOR 循环增加任何价值,除非将所有内容放在一行上而没有真正的好处。

其次,它很难修改,它仅限于一个操作,现在可能可以工作,但是如果你需要添加第二个操作,你必须重构整个事情

于 2020-12-06T20:31:33.873 回答
0
objects= [9,9,1,2,3,4,5,5,9,9,15,12,33]    
uniq=[ele for i,ele in enumerate(objects) if objects.index(ele)==i]

输出

[9, 1, 2, 3, 4, 5, 15, 12, 33]
于 2020-12-06T20:31:24.160 回答