список разбора в python - PullRequest
       37

список разбора в python

3 голосов
/ 14 апреля 2010

У меня есть список в Python, который имеет следующие записи

имя-1

имя-2

имя-3

имя-4

имя-1

имя-2

имя-3

имя-4

имя-1

name-2

имя-3

имя-4

Я хотел бы удалить имя-1 из списка, кроме его первого появления - результирующий список должен выглядеть так:

имя-1

name-2

имя-3

имя-4

name-2

имя-3

имя-4

имя-2

имя-3

* * Название тысячи сорок-девять-4

Как этого добиться?

Ответы [ 5 ]

3 голосов
/ 14 апреля 2010
def remove_but_first( lst, it):
    first = lst.index( it )
    # everything up to the first occurance of it, then the rest of the list without all it
    return lst[:first+1] + [ x for x in lst[first:] if x != it ]

s = [1,2,3,4,1,5,6]
print remove_but_first( s, 1)
2 голосов
/ 14 апреля 2010

На основании решения Марсело:

[name for cnt,name in enumerate(names) if (name != names[0] or cnt > 0)]

2 голосов
/ 14 апреля 2010

Предполагая, что name-1 означает «первый элемент»:

[names[0]] + [n for n in names[1:] if n != names[0]]

РЕДАКТИРОВАТЬ: если общей целью является дублирование всего списка, просто используйте set(names).

1 голос
/ 14 апреля 2010
mylist = ['name-1', 'name-2', 'name-3', 'name-4', 'name-1', 'name-2', 'name-3', 'name-4', 'name-1', 'name-2', 'name-3', 'name-4']
newlist = filter(lambda x: x != 'name-1', mylist)
newlist.insert(mylist.index('name-1'), 'name-1')
print newlist
['name-1', 'name-2', 'name-3', 'name-4', 'name-2', 'name-3', 'name-4', 'name-2', 'name-3', 'name-4']
1 голос
/ 14 апреля 2010

Найдите индекс первого элемента, который вы хотите удалить, затем отфильтруйте оставшуюся часть списка. Следующие работы в Python 2.5:

def removeAllButFirst(elem, myList):
    idx = myList.index(elem)
    return myList[0:idx+1] + filter(lambda x: x != elem, myList[idx+1:])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...