我正在寻找一种干净的方法来获取给定字符串中以#开头的一组单词(列表,数组等)。

在C#中,我会写

var hashtags = input
    .Split (' ')
    .Where (s => s[0] == '#')
    .Select (s => s.Substring (1))
    .Distinct ();

在Python中执行此操作的相对比较优雅的代码是什么?

编辑

输入样例:"Hey guys! #stackoverflow really #rocks #rocks #announcement"预期输出:["stackoverflow", "rocks", "announcement"]

最佳答案

使用@inspectorG4dget's answer,如果您不希望重复,则可以使用set comprehensions而不是list comprehensions。

>>> tags="Hey guys! #stackoverflow really #rocks #rocks #announcement"
>>> {tag.strip("#") for tag in tags.split() if tag.startswith("#")}
set(['announcement', 'rocks', 'stackoverflow'])

请注意,用于集合理解的{ }语法仅从Python 2.7开始有效。
如果您使用的是较旧的版本,则提要列表理解([ ])输出到set的功能为suggested by @Bertrand

10-01 22:27