在 Python 列表上进行排序和 uniq 的最简洁方法是什么?
考虑一个包含 ['foo', 'foo', 'bar']
的 Python 列表 my_list
。
统一并对列表进行排序的最 Pythonic 方法是什么?
(想想cat my_list | sort | uniq
)
这就是我目前的做法,虽然它有效,但我确信有更好的方法可以做到这一点。
my_list = []
...
my_list.append("foo")
my_list.append("foo")
my_list.append("bar")
...
my_list = set(my_list)
my_list = list(my_list)
my_list.sort()
Consider a Python list my_list
containing ['foo', 'foo', 'bar']
.
What is the most Pythonic way to uniquify and sort a list ?
(think cat my_list | sort | uniq
)
This is how I currently do it and while it works I'm sure there are better ways to do it.
my_list = []
...
my_list.append("foo")
my_list.append("foo")
my_list.append("bar")
...
my_list = set(my_list)
my_list = list(my_list)
my_list.sort()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
更快:
两个版本都返回一个生成器,因此您可能希望将结果提供给列表类型:
请注意,这也适用于不可散列的项目:
Faster:
Both versions return an generator, so you might want to supply the result to the list type:
Note that this will work with non-hashable items too:
Ignacio 提供了简单的解决方案 -
sorted(set(foo))
。如果您有唯一的数据,那么您很有可能不仅仅想要执行
sorted(set(...))
,而是始终存储一组数据并偶尔提取排序版本的价值观。 (从那时起,它开始听起来像是人们经常使用数据库做的事情。)如果您有一个排序列表,并且您想检查对数成员资格并在最坏情况线性时间内添加一个项目,您可以使用
bisect
模块。如果你想一直保持这种情况,并且你想简化事情或让某些操作执行得更好,你可以考虑
blist.sortedset
。The straightforward solution is provided by Ignacio—
sorted(set(foo))
.If you have unique data, there's a reasonable chance you don't just want to do
sorted(set(...))
but rather to store a set all the time and occasionally pull out a sorted version of the values. (At that point, it starts sounding like the sort of thing people often use a database for, too.)If you have a sorted list and you want to check membership on logarithmic and add an item in worst case linear time, you can use the
bisect
module.If you want to keep this condition all the time and you want to simplify things or make some operations perform better, you might consider
blist.sortedset
.其他人提到了sorted(set(my_list)),它适用于可哈希值,例如字符串、数字和元组,但不适用于不可哈希类型,例如列表。
要获取任何可排序类型的值的排序列表,没有重复:
这可以使用 itertools 文档。
Others have mentioned sorted(set(my_list)), which works for hashable values such as strings, numbers and tuples, but not for unhashable types such as lists.
To get a sorted list of values of any sortable type, without duplicates:
This can be further simplified using the "pairwise" or "unique_justseen" recipes from the itertools documentation.
不能说这是一种干净的方法,但只是为了好玩:
Can't say it is clean way to do that, but just for fun: