2014-02-14 8 views
1

У меня есть список, и я хочу удалить из него каждый элемент, который содержит другой элемент, кроме самого элемента.Удалить (из списка) все элементы, которые содержат другой элемент - Python

Например:

если мой список выглядит как это:

[ "AAA", "STACK_OVERFLOWAAAAAAA", "123AAAAA45678", "123456", "Foo", "DIR", " ITEM ", ........]

Теперь я хочу, чтобы код удалял все элементы, которые включают в себя« AAA ». После этого сканирования я хочу, чтобы код удалял все элементы, которые содержат в нем «123456» (если есть), и так далее.

Требуемая выход должен быть таким:

LST = [ "AAA", "123456", "Foo", "DIR", "ЭЛЕМЕНТ", ........]

Это мой код, и с какой-то причине он не работает ...

lst = ["AAA", 
    "STACK_OVERFLOWAAAAAAA", 
    "123AAAAA45678", 
    "123456", 
    "FOO", 
    "DIR", 
    "ITEM" 
    "AAAAA1234", 
    "VDFKGMGDFRAAAAAAAAAA", 
    "FNHBFDGBNDFGFHFGDUHGDRGJRAAAAAAAAA", 
    "6545154DDFEFRGAAAAAAA", 
    "123", 
    "ABC", 
    "abc"] 

# The meaning of this variable is to indicate if the sub - item has already found in the list. 
# If so, the code should remove all the next items which contains the current sub - item 
AlreadyFound = False 

# ItemToSearch = the sub - item which the program should search in the other list - items. 
for ItemToSearch in lst: 

    # Start the loop and search the sub - item in every item which in the list. 
    for ItemToCheck in lst: 

     # If the current item contains the sub - item.. 
     if (ItemToSearch in ItemToCheck): 

      # If the sub - item has already found in the list 
      if (AlreadyFound == True): 

       # Delete the current item from the list 
       del CurrItem 
      else: 
       AlreadyFound = True 

print "\n".join(lst) 
input() 

Я рад получить некоторую помощь. Спасибо.

+2

Немного запутался. Если вы удалите все с помощью «AAA», то для следующей итерации «STACK_OVERFLOWAAAAAAA» не будет существовать. Вы хотели сказать, что следующая итерация начнется с «123456»? – CodeMonkey

+0

@CodeMonkey В любом случае конечный результат будет таким же. Все, что может быть удалено с помощью «STACK_OVERFLOWAAAAAAA», исчезнет, ​​так как оно имеет «AAA» в качестве подмножества – StephenTG

+0

@CodeMonkey. Вы правы, конечно. Я исправил свой вопрос .. :) – Aviv

ответ

3

Это следует сделать это:

>>> lst = ["AAA", "STACK_OVERFLOWAAAAAAA", "123AAAAA45678", "123456", "FOO", "DIR", "ITEM"] 
for i, x in enumerate(lst): 
    lst[i+1:] = [y for y in lst[i+1:] if x not in y] 
...  
>>> lst 
['AAA', '123456', 'FOO', 'DIR', 'ITEM'] 
>>> 
+0

Это отлично работает! Спасибо огромное ! – Aviv

Смежные вопросы