如何找到独特的字符串开头?

时间:2009-11-19 14:07:33

标签: python

如果我有一个字符串列表(例如'blah 1','blah 2''xyz fg','xyz penguin'),那么找到独特字符串开头的最佳方法是什么('xyz'和'blah'在这种情况下)?字符串的开头可以是多个单词。

2 个答案:

答案 0 :(得分:4)

你的问题令人困惑,因为目前尚不清楚你真正想要的是什么。所以我会给出三个答案,并希望其中一个至少部分回答你的问题。

  1. 要获取给定字符串列表的所有唯一前缀,您可以执行以下操作:

    >>> l = ['blah 1', 'blah 2', 'xyz fg', 'xyz penguin']
    >>> set(s[:i] for s in l for i in range(len(s) + 1))
    {'', 'xyz pe', 'xyz penguin', 'b', 'xyz fg', 'xyz peng', 'xyz pengui', 'bl', 'blah 2', 'blah 1', 'blah', 'xyz f', 'xy', 'xyz pengu', 'xyz p', 'x', 'blah ', 'xyz pen', 'bla', 'xyz', 'xyz '}
    

    此代码会生成列表中每个字符串的所有初始slices,并将其传递给set以删除重复项。

  2. 要获得小于完整字符串的所有最大的初始序列,您可以使用:

    >>> l = ['a b', 'a c', 'a b c', 'b c']
    >>> set(s.rsplit(' ', 1)[0] for s in l)
    {'a', 'a b', 'b'}
    

    此代码通过splitting在最右边的空间创建一个集合(如果可用)(否则将返回while字符串 )。

  3. 另一方面,要在不考虑完整字符串的情况下获取所有唯一的初始序列,您可以选择:

    >>> l = ['a b', 'a c', 'a b c', 'b c']
    >>> set(' '.join(w[:i]) for s in l for w in (s.split(),) for i in range(len(w)))
    {'', 'a', 'b', 'a b'}
    

    此代码splits在任何空白处的每个单词和concatenates结果列表的所有初始切片,除了最大的一个。这段代码有陷阱:它会例如将制表符转换为空格。在您的情况下,这可能是也可能不是问题。

答案 1 :(得分:2)

如果你的意思是字符串唯一的第一个单词(单词用空格分隔),那就是:

arr=['blah 1', 'blah 2' 'xyz fg','xyz penguin']
unique=list(set([x.split(' ')[0] for x in arr]))