Python 在for循环中使用if语句进行单行编码
我需要帮助缩短成一行以下代码Python 在for循环中使用if语句进行单行编码,python,one-liner,Python,One Liner,我需要帮助缩短成一行以下代码 for i in objects: if i not in uniq: uniq.append(i) 我这样做只是为了挑战,不打算保留它。最简单的一种方法是使用集合: uniq=set(对象) 如果您确实需要列表,您当然可以从集合中创建一个列表: uniq=list(集合(对象)) 输出 [9, 1, 2, 3, 4, 5, 15, 12, 33] 您可以使用列表理解,尽管出于许多原因,这是一个坏主意 uniq=[] objects
for i in objects:
if i not in uniq:
uniq.append(i)
我这样做只是为了挑战,不打算保留它。最简单的一种方法是使用
集合:
uniq=set(对象)
如果您确实需要列表,您当然可以从集合中创建一个列表:
uniq=list(集合(对象))
输出
[9, 1, 2, 3, 4, 5, 15, 12, 33]
您可以使用列表理解,尽管出于许多原因,这是一个坏主意
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循环增加任何价值,除了将所有内容放在一行上,没有任何真正的好处
其次,很难修改,它仅限于一个操作,现在可能可以工作,但如果需要添加第二个操作,则必须重构整个操作您有没有特别尝试过什么?uniq=set(Object)
如何?你还没有说代码应该做什么,或者你的代码有什么问题。不,使用set会扰乱列表的顺序。如果你想把列表重新排序到第一个列表的“顺序”中,那么你可以在它上面抛出一个sorted
:sorted(list(set(objects)),key=lambda x:objects.index(x))
这正是我要找的,谢谢!啊,这是个坏主意,别这么做@达夫·迪杜:看。
[9, 1, 2, 3, 4, 5, 15, 12, 33]