【问题标题】:Explain this list comprehension解释这个列表理解
【发布时间】:2018-07-27 08:14:47
【问题描述】:
y=[ x[i] for i in range(len(x)) if not x[i] in x[:i] ]

谁能向我解释一下这种逐步删除重复项并按升序对它们进行排序的方法是如何在这一行中同时工作的?

【问题讨论】:

  • 那不做任何排序。你对它的操作有什么特别不了解的地方?
  • 你明白if not x[i] in x[:i]是什么意思吗?
  • @PM2Ring 我不知道,你能解释一下那部分吗?谢谢
  • x[:i] 创建一个x 的切片,其中包含xx[i] 之前的所有项目。因此,如果 x[i]x[i] 之前存在重复,则 x[i] in x[:i] 为真。

标签: python python-3.x list for-loop if-statement


【解决方案1】:

它只是将每个元素添加到一个新列表中,以防该元素不在列表中已经被 for 循环处理的部分。没有排序发生。

这样写循环看起来会更清晰一些:

lst = [5,5,5,1,2,3,4,]
[x for i, x in enumerate(lst) if x not in lst[:i]]
>>> [5, 1, 2, 3, 4]

enumerate() 返回索引以及元素。

python 中一种更快的方法:

sorted(set(lst))
>>> [1, 2, 3, 4, 5]

更新 正如 Chris_Rands 所说,set() 未排序。使用sorted() 将返回一个已排序元素的列表。

【讨论】:

  • 第二种方法不对输出进行排序,集合是无序的,并且 list() 调用没有排序,对于整数,输出可能看起来是有序的,但这只是实现的一个怪癖
猜你喜欢
  • 2021-05-27
  • 2022-06-16
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 2020-05-15
相关资源
最近更新 更多