我需要帮助将以下代码缩短为一行。
for i in objects:
if i not in uniq:
uniq.append(i)
我只是为了挑战而这样做,而不是保留这个。
最简单的 oneliner 是使用set
:
uniq = set(objects)
如果你真的需要一个列表,你当然可以从集合中创建一个:
uniq = list(set(objects))
您可以使用列表推导,尽管出于多种原因这是一个坏主意
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 循环增加任何价值,除非将所有内容放在一行上而没有真正的好处。
其次,它很难修改,它仅限于一个操作,现在可能可以工作,但是如果你需要添加第二个操作,你必须重构整个事情
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]