Как найти уникальные начала строк? - PullRequest
0 голосов
/ 19 ноября 2009

Если у меня есть список строк (например, «blah 1», «blah 2», «xyz fg», «xyz penguin»), каков будет лучший способ найти уникальные начала строк («xyz» и «бла» в этом случае)? Начало строк может быть несколькими словами.

Ответы [ 2 ]

4 голосов
/ 19 ноября 2009

Ваш вопрос сбивает с толку, так как не ясно, чего вы действительно хотите. Поэтому я дам три ответа и надеюсь, что один из них хотя бы частично ответит на ваш вопрос.

  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 '}
    

    Этот код генерирует все начальные фрагменты каждой строки в списке и передает их в 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'}
    

    Этот код создает набор путем разбиения всех строк в крайнем правом месте, если доступно (в противном случае строка while будет возвращена ).

  3. С другой стороны, чтобы получить все уникальные начальные word последовательности без учета полных строк, вы можете пойти на:

    >>> 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'}
    

    Этот код разбивает каждое слово на любой пробел и объединяет все начальные фрагменты результирующего списка, кроме самого большого. Этот код имеет ловушку: он будет, например, конвертировать вкладки в пробелы. Это может или не может быть проблемой в вашем случае.

2 голосов
/ 19 ноября 2009

Если вы имеете в виду уникальные первые слова строк (слова, разделенные пробелом), это будет:

arr=['blah 1', 'blah 2' 'xyz fg','xyz penguin']
unique=list(set([x.split(' ')[0] for x in arr]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...