2015-04-11 3 views
-1

У меня есть список в Python так:Как я могу разделить строки и получить только первую часть?

l=['1:a', '2:b' '1:c', '3:d', '4:d' ] 

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

list(set(l)).split(':')[0] 

Но я знаю, что это неверно. Я хочу, чтобы следующий результат:

>>> ['1', '2', '3', '4'] 

1:a У меня есть и 1:c, поэтому я хочу, чтобы захватить только 1.

+0

Вы не можете объявить список, используя этот синтаксис: l = [1: a, 2: b 1: c, 3: d, 4: d]. Этот синтаксис зарезервирован для словарей – Codejunky

+0

Ты все рушишь меня ??? Я исправил вопрос !!! – MLSC

+0

Мы люди ... Все мы можем сделать ошибку нежелательной ... !!! – MLSC

ответ

1

Если вы хотите только уникальные значения, и вы беспокоитесь о заказе, то вы можете использовать collections.OrderedDict, как этот

>>> from collections import OrderedDict 
>>> l = ['1:a', '2:b' '1:c', '3:d', '4:d'] 
>>> list(OrderedDict.fromkeys(item.split(':')[0] for item in l).keys()) 
['1', '2', '3', '4'] 

Если вы не беспокоитесь о заказе, то вы можете использовать set как это

>>> set(item.split(':')[0] for item in l) 
{'1', '3', '4', '2'} 

Если вы хотите, чтобы результаты были в отсортированном порядке, то вы можете использовать sorted функцию, как это

>>> sorted(set(item.split(':')[0] for item in l), key=int) 
['1', '2', '3', '4'] 

Он преобразует отдельные элементы в целые числа, когда он сравнивает их во время сортировки.

Вы также можете использовать набор понимание здесь, как этот

>>> sorted({item.split(':')[0] for item in l}, key=int) 
['1', '2', '3', '4'] 
+0

Большое спасибо :) – MLSC

+0

В качестве примечания вы можете сделать набор понятий вместо вызова 'set()' с выражением генератора, то есть: 'sorted ({item.split (':') [0] для item in l}, key = int) '. –

+0

@ Lattyware О да, я совсем забыл об этом. Спасибо :-) – thefourtheye

1

Сначала вы должны, вероятно, сделать новый список, принимая число из строки

numbers = [i.split(":")[0] for i in l] 

Это список понимание, но вы могли бы используйте цикл for.

Затем, используя набор для удаления дубликатов

no_duplicates = list(set(numbers)) 

Если вы беспокоитесь о порядке списка, сортировки, как так:

no_duplicates.sort(key=int) 
+0

, используя сортировку, не собирается заказать список изначально, если он будет случайно –

+0

@PadraicCunningham Это не будет, но метод orderdict был в принятом ответе, и я не мог думать другого более простого способа –